5

En IIS tengo:IE/IIS problema de autenticación integrado

http://myserver/myapplication
http://myserver/reports

La aplicación está reportando informes de servicios, de hecho, que utiliza la autenticación de Windows. myapplication es una aplicación asp.net que utiliza autenticación de formularios.

El servidor está fuera del dominio de la compañía. Si tengo acceso a los informes primero y escribo el usuario y la contraseña (credenciales locales creadas en el servidor) cuando se me solicite, puedo acceder a la página de informes, sin problemas. Si luego voy directamente a la página de inicio de sesión de mi aplicación y trato de iniciar sesión, la página de inicio de sesión se actualiza sin hacer nada. Esto siempre ocurre en IE 6. En IE 7 sucede intermitentemente. No ocurre en Firefox o si Fiddler se ejecuta en segundo plano, lo que parece solucionar el problema sobre la marcha.

Utilicé wireshark para ver qué está pasando y descubrí que IE 6 envía el token de autenticación de Windows obtenido de la aplicación de informes a myapp. Esa fue la única diferencia entre IE y Firefox. IIS parece enloquecer y simplemente interpreta mi POST a la página de inicio de sesión como un GET y regresa.

Si agrego la autenticación de Windows a una aplicación en IIS todo parece funcionar bien con cualquier navegador.

¿Por qué sucede esto? ¿Un error en IE o me estoy perdiendo algo?

Respuesta

13

Es un error en IE, y por lo tanto es un error en el diseño de autenticación NTLM/Negociar (también conocido como Integrado) a través de HTTP.

NTLM/Negociar son protocolos de autenticación orientados a la conexión, que HTTP no fue diseñado para. Como resultado, cuando necesita este mecanismo de autenticación para una página en su servidor, IE generalmente asumirá que otras páginas en el servidor tienen el mismo requisito.

Además, por razones de rendimiento y seguridad, si IE espera una Negociar desafío/NTLM para una solicitud POST dado, entonces primero enviará un mensaje 0 bytes, esperando el servidor para devolver un HTTP/401 desafío al que se autenticará y luego enviará correctamente el cuerpo POST.

Sin embargo, en su caso, la carpeta que no requiere autenticación integrada obtiene la POST de 0 bytes y dice "Hrm, raro, una publicación de 0 bytes. Bien, HTTP/200, aquí está la página como si usado GET ".

Como IE nunca obtiene el desafío 401 que espera, en realidad nunca envía el cuerpo POST.

(Fiddler puede confundirlo un poco debido a la forma en que funciona la reutilización de conexiones HTTP).

La solución consiste en asegurarse de que si utiliza la autenticación integrada en el host, utilícela en todas partes.

+0

gracias Eric, ¿cuál sería la solución para esto? IE debería enviar todo el mensaje POST como lo hace Firefox, ¿verdad? Supongo que IE 8 funciona, aún no lo he probado. –

Cuestiones relacionadas