Pregunta

Por favor, ¿alguien puede dar una forma simple y directa de habilitar ASP.NET > Kerberos > ¿Servidor SQL?

Tenemos clientMachine > servidor web > servidor de base de datos. El cliente insiste en que el sitio debe extraer el inicio de sesión de Windows y no solicitarlo, de ahí la necesidad de Kerberos y la autenticación integrada. También DEBE suplantar al usuario en el servidor db, induciendo un doble salto.

Nuestro dominio es un dominio de Windows 2003, que por lo que puedo ver en línea, significa que Kerberos está habilitado. Y en una computadora unida al dominio, cuando inicie sesión, kerbtray me muestra que tengo una gran cantidad de tickets, por lo que aparentemente está funcionando.

Las cuentas de computadora del servidor web y de la base de datos en AD son "confiables para la delegación".
Las cuentas de usuario de AD que deben acceder al sistema son "confiables para la delegación".
Cuando todo funcione, agregaré más usuarios, por ahora dos.

La instancia de Sql Server se ejecuta en LocalSystem en el servidor de la base de datos, lo que, por lo que puedo decir en línea, significa que NO requiere jugar con esas cosas de SPN.

Sin embargo, cuando intento iniciar sesión con cualquiera de los usuarios, obtengo

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. 

indica una falla de doble salto. Esto se ve favorecido por el hecho de que en el registro de la aplicación en el servidor db hay una gran cantidad de entradas de "MSSQL". diciendo lo mismo

Realmente no puedo creer lo difícil que es esto ... quiero decir, IIS, SQL y Windows son todos Microsoft, ¿no pueden hablar mejor?

Entonces, en resumen, tengo

  • un dominio kerberos,
  • DB y el servidor web son confiables para la delegación
  • usuarios de confianza para la delegación
  • usuarios en un grupo de anuncios
  • AD group como inicio de sesión en sql (y usuario en db)
  • IIS con Anónimo desactivado, Integrado activado, Básico y Digest desactivado
  • IE con Enable Integrated on

¿Fue útil?

Solución 2

La respuesta, en última instancia, estaba en los SPN.

Este sistema se configuró en nuestro sitio de prueba, que es test.ourcompany.com, por lo que necesitaba agregar un nuevo SPN para esa referencia. Entonces, además de lo siguiente:

HTTP/server 
HTTP/server.ourdomain.com

También necesitaba agregar uno adicional para:

HTTP/test.ourcompany.com

Geez, ¡qué batalla! ¡Al menos se acabó! :)
Gracias por la ayuda chicos!

Otros consejos

Descargue el Solución de problemas de la delegación de Kerberos . Es un salvavidas.
En la página 17 encontrará la Lista de verificación de Active Directory . Siga la lista de verificación paso a paso.
En la página 30 encontrará la Lista de verificación de la aplicación del cliente . Verifique la lista de verificación paso a paso.
En la página 35 se encuentra la Lista de verificación de nivel medio . Verifíquelo paso a paso.
En la página 48 se encuentra la Lista de verificación de back-end . Verifíquelo paso a paso.

Si aún tiene problemas, el documento contiene una lista detallada de herramientas de solución de problemas (kerbtray, klist, ldifde, etc.), una explicación detallada sobre cómo habilitar el registro y la auditoría de errores de autenticación en el registro de eventos del sistema, una explicación detallada de todos los errores códigos en las entradas del registro de eventos de la auditoría de autenticación y así sucesivamente.

Una vez que descubras qué está mal, será mucho más fácil solucionarlo.

Lo que está describiendo debería funcionar sin problemas.

Su cadena de conexión debería verse así:

<add name="IntegratedAuthConnectionString" connectionString=
 "Data Source=DATABASEINSTANCE;Integrated Security=True"
 providerName="System.Data.SqlClient"/>

Su web.config también debe especificar la autenticación de Windows

<authentication mode="Windows"/>

Cree una página de prueba que descargue todo de la colección Request.ServerVariables y asegúrese de que está viendo el nombre de usuario y el dominio autenticados. Algo en la línea del código a continuación

foreach (string s in Request.ServerVariables)
{
    Response.Write(s + ": " + Request.ServerVariables[s] + "<br />");
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top