fazer uma pós http do servidor credenciais usando usuário - segurança integrada
-
20-08-2019 - |
Pergunta
Eu estou tentando fazer um post, a partir de uma página asp lado clássico servidor, usando as credenciais do usuário ...
Eu estou usando MSXML2.ServerXMLHTTP fazer programaticamente o post
Eu tentei com várias configurações no 5.1 site do IIS, mas não há nenhuma maneira que eu posso fazer IIS executado com uma conta especificada ...
Eu fiz uma página asp pouco que corre whoami para verificar o que representam os iis processar i usando ...
segurança com o IIS 5.1, utilizando-se integrou os usos de processo:
my_machine \ IWAM_my_machine
I desativar a segurança integrada, e deixar uma conta de domínio como o acesso anônimo, e eu obter o mesmo (¿?)
para testar o usuário eu faço o seguinte
private function whoami()
dim shell, cmd
set shell = createObject("wscript.shell")
set cmd = shell.exec( server.mapPath( "whoami.exe" ) )
whoami = cmd.stdOut.readAll()
set shell = nothing: set cmd = nothing
end function
é porque eu estou emitindo um comando shell?
Eu gostaria de fazer http chamadas post, para outro site que funciona com segurança integrada ...
Então eu preciso de alguma forma para passar as credenciais, ou pelo menos para ser executado com uma conta especificada, e em seguida, configurar o site remoto para empurrar essa conta ...
Eu pensei que apenas definir o local para trabalhar com segurança integrada seria suficiente ...
Como posso conseguir uma coisa dessas?
ps: com IIS6, acontece o mesmo mas se eu mudar o canfiguration piscina recebo a seguinte informações whoami
NT AUTHORITY \ SERVIÇO DE REDE
NT AUTHORITY \ LOCAL SERVICE
NT AUTHORITY \ SYSTEM
se eu definir uma conta de domínio, recebo um "serviço indisponível" mensagem ...
edit: encontrado este
diz o que eu supossed: "Se um usuário autenticado faz uma solicitação, o segmento de token é baseado na conta autenticada do usuário", mas de alguma forma eu não parece trabalho assim ... o que eu poderia possivelmente estar faltando?
edit:
bem a coisa whoami é, obviamente, me enganando, eu tentei com a seguinte função
private function whoami_db( serverName, dbName )
dim conn, data
set conn = server.createObject("adodb.connection")
conn.open "Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _
"Initial Catalog=" & dbName & ";Data Source=" & serverName
set data = conn.execute( "select suser_sname() as user_name" )
whoami_db = data("user_name")
data.close: conn.close
set data = nothing: set conn = nothing
end function
e tudo parecia estar funcionando bem ...
mas como posso fazer o trabalho MSXML2.ServerXMLHTTP com as credenciais do usuário ???
Solução
Você está whoami.exe correta estava confundindo você. O lançamento de um processo separado causou o novo processo para executar como o usuário do processo atual. No XP, que seria o anfitrião aplicação COM + (DLLHOST) e normalmente executado como IWAM_<machine>
. Em IIS6 seria o processo de trabalho w3wp.exe e, normalmente, é executado como NT AUTHORITY \ Network Service.
No entanto, um fio de processamento de uma solicitação HTTP irá representar um token de segurança diferente. Com segurança integrada, como você descobriu isso o token de segurança do usuário que fez a solicitação, conforme sua experiência SSPI confirma. Com o acesso anônimo do usuário anônimo configurado no site / aplicativo é usado, este é tipicamente <MACHINE>\IUSR_<machine>
.
Quanto ao seu problema específico com ServerXMLHTTP isso vai voltar para o WinHTTP componente subjacente. Este, por padrão só enviará as atuais credenciais de usuários se o servidor que está sendo acessado a lista de bypass proxy. Mesmo assim possível as configura ServerXMLHTTP-lo para nunca enviar as credenciais do usuário, eu não testar esse cenário me.
Infelizmente ServerXMLHTTP fornece um acesso muito limitado aos detalhes de configuração no WinHTTP. No entanto, se este é um show rolha então você pode sempre usar o componente WinHTTP diretamente a si mesmo: -
Dim oWinHTTP
Dim oDOM
Const AutoLogonPolicy_Always = 0
Set oWinHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
oWinHTTP.SetAutoLogonPolicy AutoLogonPolicy_Always
oWinHTTP.Open "GET", "http://remoteserver.org/getsomexml.xxx", False
oWinHTTP.Send
If oWinHTTP.Status = 200 Then
Set oDOM = CreateObject("MSXML2.DOMDocument.3.0")
oDOM.async = false
oDOM.Load oWinHTTP.ResponseStream
End If
Set oWinHTTP = Nothing
Isso deve funcionar para http, https para ele fica confuso real.