hacer una publicación http desde el servidor utilizando credenciales de usuario - seguridad integrada

StackOverflow https://stackoverflow.com/questions/1046513

Pregunta

Estoy tratando de hacer una publicación, desde una página lateral del servidor asp classic, usando las credenciales de usuario ...

Estoy usando msxml2.ServerXMLHTTP para hacer la publicación programáticamente

He intentado con varias configuraciones en el sitio IIS 5.1, pero no hay forma de que IIS se ejecute con una cuenta especificada ...

Hice una pequeña página asp que ejecuta whoami para verificar qué cuenta está usando el proceso iis ...

con IIS 5.1, usando seguridad integrada que el proceso usa:

my_machine \ IWAM_my_machine

Desactivo la seguridad integrada, y dejo una cuenta de dominio como acceso anónimo, y obtengo lo mismo (& # 191 ;?)

para probar al usuario hago lo siguiente


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

¿es porque estoy emitiendo un comando de shell?

Me gustaría hacer llamadas post http, a otro sitio que funcione con seguridad integrada ...

Entonces, necesito alguna forma de pasar las credenciales, o al menos ejecutar con una cuenta específica, y luego configurar el sitio remoto para ingresar esa cuenta ...

Pensé que solo configurar el sitio para que funcione con seguridad integrada sería suficiente ...

¿Cómo puedo lograr tal cosa?

ps: con IIS6, sucede lo mismo pero si cambio la configuración de la piscina, obtengo la siguiente información de whoami

AUTORIDAD NT \ SERVICIO DE RED

AUTORIDAD NT \ SERVICIO LOCAL

NT AUTHORITY \ SYSTEM

si configuro una cuenta de dominio, obtengo un " servicio no disponible " mensaje ...

editar: encontré esto

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

dice lo que supuse, " Si un usuario autenticado hace una solicitud, el token de subproceso se basa en la cuenta autenticada del usuario " ;, pero de alguna manera no parece funcionar como eso ... ¿qué podría estar perdiendo?

editar:

bueno, lo de whoami obviamente me está engañando, intenté con la siguiente función


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

función final

y todo parecía estar funcionando bien ...

pero ¿cómo puedo hacer que msxml2.ServerXMLHTTP funcione con las credenciales de usuario ???

¿Fue útil?

Solución

Tienes razón whoami.exe te estaba confundiendo. El lanzamiento de un proceso separado hizo que el nuevo proceso se ejecutara como el usuario del proceso actual. En XP, ese sería el host de la aplicación COM + (DLLHOST) y normalmente se ejecutaría como IWAM_<machine>. En IIS6 funcionaría el proceso de trabajo w3wp.exe y normalmente se ejecuta como NT AUTHORITY \ Network Service.

Sin embargo, un subproceso que procesa una solicitud HTTP suplantará un token de seguridad diferente. Con la seguridad integrada como ha descubierto, esto sería el token de seguridad del usuario que realiza la solicitud, como lo confirma su experimento SSPI. Con el acceso anónimo, se utiliza el usuario anónimo configurado en el sitio / aplicación, esto suele ser <MACHINE>\IUSR_<machine>.

En cuanto a su problema específico con ServerXMLHTTP, esto se remonta al componente subyacente WinHTTP. Por defecto, esto solo enviará las credenciales de los usuarios actuales si el servidor al que se accede es la lista de omisión de proxy. Incluso entonces es posible que ServerXMLHTTP lo configure para que nunca envíe las credenciales de usuario, no he probado ese escenario yo mismo.

Desafortunadamente, ServerXMLHTTP proporciona acceso muy limitado a los detalles de configuración en WinHTTP. Sin embargo, si este es un show stopper, siempre puede usar el componente WinHTTP directamente usted mismo: -

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

Eso debería funcionar para http, para https se vuelve realmente desordenado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top