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

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/275269ee-1b9f-4869-8d72-c9006b5bd659.mspx?mfr=true

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 ???

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top