Evitar la respuesta 401 para cada solicitud usando NTLM


Tenemos aquí un asp.net 3.5 aplicación que utiliza autenticación de Windows basada en NTLM. El sistema se ejecuta en una red privada que en realidad se distribuye en diferentes lugares geográficos (conectado a través de VPN).

Ahora estamos tratando de optimizar el rendimiento del sitio web. Debido a la forma en que funciona NTLM, cada nueva solicitud al IIS se compone de 3 solicitudes diferentes, mientras que las primeras 2 son 401 respuestas. Estamos tratando de minimizar la cantidad de estas solicitudes para ser sólo al comienzo de la sesion. Encontramos esta solución. Desafortunadamente no cambió nada y seguimos recibiendo esta respuesta 401 (que consume tiempo).

Para ver el tráfico primero utilicé la aplicación Fiddler. De alguna manera, cuando uso Fiddler, solo hay 1 proceso de autenticación al comienzo de la sesión (exactamente como deseo), pero cuando cierro Fiddler y compruebo el tráfico a través de WireShark puedo ver que todavía tengo esta respuesta 401 para cada solicitud.

Los clientes utilizados son IE6, IIS version 6.

Alguien Puede aconsejar?

Author: Dennis G, 2009-08-03

7 answers

NTLM/Negotiate, a diferencia de todos los demás esquemas de autenticación HTTP, son protocolos orientados a la conexión.

En IIS, hay varias configuraciones que controlan si se exigirá autenticación para todas las solicitudes en una conexión previamente autenticada (por ejemplo, AuthPersistSingleRequest). Independientemente de esa configuración, creo que IIS exigirá automáticamente la re-autenticación al hacer una solicitud POST.

Si su servidor está perjudicando la reutilización de la conexión (por ejemplo, enviando una conexión: cerrar encabezado en las respuestas) debe arreglar eso porque de lo contrario se producirá la reautenticación. Usted puede comprobar fácilmente para dicha autenticación-reutilizar encabezados de foiling usando Fiddler.

 19
Author: EricLaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-03 15:07:57

La única manera es usar NTLM solo en la página de inicio de sesión y usar cookies como aquí

 4
Author: Viktor Jevdokimov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:55:13

¿Has probado esto en tu dominio?

setspn -a FQDNServerName applicationPoolServiceAccount
setspn -a biosServerName applicationPoolServiceAccount

Permite al grupo de aplicaciones dar servicio a las solicitudes de autenticación NTLM.

 3
Author: cfburns,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-27 15:04:38

Podría ser su configuración de seguridad en IE6 para el sitio. Intente cambiar a intranet local o sitio de confianza.

 2
Author: Shiraz Bhaiji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-03 14:06:46
 2
Author: dparnas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-12 08:48:04

Tengo exactamente el mismo problema! Estoy usando el mismo ambiente que tú. Excepto que veo 2401 incluso en Fiddler. Había pasado un par de días en ese problema y luego me di por vencido. AuthPersistence tampoco funcionó para mí. Pero aquí están los enlaces que había encontrado, tal vez van a trabajar en su caso.

Http://msdn.microsoft.com/en-us/library/ms525244.aspx

Http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/b0b4ec5c-74f8-43e9-ac64-d8b852568341.mspx?mfr=true

Http://technet.microsoft.com/en-us/library/cc786094.aspx

Http://technet.microsoft.com/en-us/library/cc781339 (WS.10).aspx

Traté de establecer la bandera tanto en el directorio virtual y el nivel de sitio web, pero no ayudó. ¿Está utilizando el Explorador de Metabase de IIS para editar esas propiedades? Es la forma más limpia de editar propiedades y puede ayudar más que directamente editar el archivo XML.

Una forma de evitar el problema es insertar el encabezado Cache-Control en la respuesta HTTP para los recursos que no van a cambiar con frecuencia en ninguna página. En mi caso, almacené en caché los archivos css (use css externo tanto como sea posible para optimizar esto), js e img. Ya que tengo unos 60 archivos de este tipo que se cargan en nuestra página de inicio, hemos sido capaces de eliminar alrededor de 120 errores 401 de inmediato!

Asegúrese de usar el encabezado Cache-Control y no el almacenamiento en caché if-modified o e-tag, donde se generarán 401 y 304 incluso cuando los archivos se almacenen en caché.

 1
Author: Punit Vora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-06 14:28:44

También estaba teniendo este problema, excepto que, para mí, fueron principalmente los archivos JS y CSS los que causaron esto. Mi sitio (como la mayoría de los sitios) mantiene los archivos JS y CSS en sus propios directorios. Así que la solución para mí era simplemente ir a esos directorios en IIS y habilitar Anon Auth (digo simplemente, pero me tomó más de dos años para resolver esto; gracias a este post). Ahora el sitio todavía requiere autorización de Windows, pero los subdirectorios para los archivos JS y CSS no lo hacen. IOW, parece estar funcionando perfectamente.

También nunca pondría información sensible en un archivo JS (o archivo CSS para el caso) y sugeriría que usted tampoco. Si lo hace, obviamente querrá mover la información sensible en estos archivos fuera de estos directorios.

 0
Author: krowe2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-11 20:27:47