.net - La aplicación web no pudo iniciar sesión para el usuario ''NT AUTHORITY / ANONYMOUS LOGON''
iis-6 windows-2003-webserver (3)
Descubrí que el problema para mí era que en IIS tenía habilitada la autenticación de Windows en lugar de la autenticación básica. Tan pronto como cambié a la autenticación básica, pude acceder al servidor SQL con la cuenta de inicio de sesión.
En IIS, solo la autenticación básica registra a los usuarios con un token de seguridad que fluye a través de la red a un servidor SQL remoto. De forma predeterminada, otros modos de seguridad de IIS utilizados junto con la configuración del elemento de configuración de identidad no darán como resultado un token que pueda autenticarse en un servidor SQL remoto.
Veo que muchas personas reciben este error, pero todas sus situaciones parecen un poco diferentes a las mías.
Tengo una aplicación web ASP.NET 4.0 que se ejecuta en IIS 6.0 en un servidor Windows 2003.
Cuando remito al cuadro del servidor web e inicio sesión allí y accedo al sitio como localhost en lugar de por nombre de máquina, la aplicación web funciona bien. Sin embargo, cuando accedo al sitio web desde otra máquina cliente, obtengo el siguiente error:
Login failed for user ''NT AUTHORITY/ANONYMOUS LOGON''
El sitio web tiene acceso anónimo activado Autenticación de Windows activada. La aplicación web contiene lo siguiente:
<authentication mode="Windows"> </authentication>
<identity impersonate="true"/>
<connectionStrings>
<add name="MyConnection" connectionString="Data Source=MyDbServer;Initial Catalog=MyDatabase;Integrated Security=True"
</connectionStrings>
Mi servidor web se está ejecutando en un servidor virtual. ¿Esto es relevante? Supongo que no.
Tenga en cuenta que si agrego mi dominio / inicio de sesión y contraseña en la configuración web después de Impersonation = TRUE, el sitio funciona.
El problema aquí es que estás usando
<authentication mode="Windows"> </authentication>
Esto necesita su navegador para enviar credenciales NTLM
. Firefox no envía esto por defecto.
Cuando está en el servidor y usa localhost, su navegador está enviando sus credenciales de inicio de sesión de Windows al servidor. Se está autentificando y dando acceso al usuario, MyDomain / MyID.
ASP.NET se hace pasar por el token que le ha pasado IIS, que es un usuario autenticado o la cuenta de usuario anónima de Internet (IUSR_machinename).
Todas sus solicitudes web, que se producen desde máquinas que no están en ese dominio, se ejecutarán bajo la cuenta anónima. En su caso, NT AUTHORITY/ANONYMOUS LOGON
Su cadena de conexión está utilizando, Integrated Security=True
. Eso significa que la cuenta de Windows en la que se procesa el subproceso asp.net también debe tener acceso a la base de datos. Si desea pasar las credenciales de Windows utilizadas para iniciar sesión en IIS, debe establecer, Trusted_Connection=Yes
.
Consulte: Cómo acceder a SQL Server usando la seguridad integrada de Windows.
Le sugiero que eche un vistazo a la autenticación de formularios , si planea exponer este servicio web en la web, o si desea ponerlo a disposición de usuarios que no son el mismo dominio que su servidor.
Parece que te encuentras con lo que se llama un problema de "doble salto", que es donde no se confía en el servidor para que pase las credenciales del cliente a otra casilla (el salto 1 es la credencial del cuadro de IIS, el salto 2 es desde el cuadro de IIS al servidor SQL).
Cuando inicie sesión directamente en el servidor, no es necesario que el segundo salto se realice, ya que solo pasa las credenciales directamente desde la máquina cliente (el servidor IIS en este escenario) directamente al servidor SQL. Del mismo modo, si SQL Server viviera en el cuadro de IIS, tampoco tendría este error, ya que el cliente solo haría la única solicitud a un cuadro que podría compartir las credenciales con IIS y SQL Server.
Se requieren bastantes pasos para que la delegación funcione, como confiar en los servidores para la delegación, crear SPN y asegurarse de que se otorguen otros permisos adecuados a la cuenta que IIS usa para ejecutar el sitio web. Hay un artículo de tecnología que puede ayudarlo a llevar a cabo muchos de los pasos necesarios aquí: http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx
Nota: si está utilizando NTLM y no Kerberos (u otro protocolo delegable), no funcionará, ya que el servidor central (el servidor IIS) debe tener un token que pueda pasar. Como NTLM se basa en la negociación, no funcionará.