Pregunta

tenemos un sistema en el que cliente quiere integrar la autenticación de Windows. Se trata de una aplicación ASP.NET 3.5, se conecta a SQL Server 2005. El servidor web es Server 2003 R2 SP2. El servidor db es Server 2003 SP2 (no R2).

En el servidor db, me encontré con la siguiente secuencia de comandos

exec sp_grantlogin 'myDomain\myUserGroup'
USE myDbName
exec sp_grantdbaccess 'myDomain\myUserGroup'

Tengo 3 usuarios en el grupo de usuarios de Windows 'dominio \ myUserGroup' ahora mismo. Las tres cuentas de los usuarios están marcados como de confianza para la delegación. La cuenta de servidor web en los anuncios se marca de confianza para la delegación.

La aplicación web está marcado como el uso de la autenticación de Windows (todos los demás apagados). El web.config tiene las siguientes líneas:

<authentication mode="Windows" ></authentication>
<identity impersonate="true" />
<authorization>
    <deny users="?"/>
</authorization>

Sin embargo, cuando intento conectar a la aplicación web con un usuario que se encuentra en el grupo de usuarios, me sale el error:

System.Data.SqlClient.SqlException: 
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

Mi cadena de conexión se construye a partir de una ConnectionStringBuilder SQL construida como tal:

ConnectionStringBuilder.DataSource = "MYDBSERVER"
ConnectionStringBuilder.InitialCatalog = "MYDBCATALOG"
ConnectionStringBuilder.IntegratedSecurity = True

Si i codificar una de las cuentas permitidas para suplantar en el web.config <identity /> línea funciona. Pero si me quito la cuenta no modificable y tratar de pasar la identidad de la máquina del cliente. Me sale el error.

Así que parece que no tengo algo configurado correctamente para el escenario de inicio de sesión integrado de múltiples saltos, pero no puedo averiguar qué.

Gracias de antemano!

¿Fue útil?

Solución

Si utiliza la autenticación de Windows entonces la suplantación no fluye más allá del proceso de ASP.NET en sí. Tiene dos opciones aquí - de intercambio para la autenticación básica, donde los flujos de Identidad o, si se está ejecutando en Win2003 o posterior, puede utilizar Kerberos y algunos hackery para suplantar al conectar

Otros consejos

La máquina ASP ha autenticado el usuario que se conecta a IIS a través de NTLM / Kerberos. La autenticación es garantizada por el controlador de dominio que ha pedido al proceso de usuario original (IE) para presentar un secreto que garantice su identidad: su contraseña tecleó cuando se registra en la caja. La autenticación en realidad no es hecho por los procesos involucrados, sino por la autoridad de seguridad local (LSA, aka. Lsass.exe) en cada máquina en cuestión. Debido a que la LSA en la máquina ASP sabe que la autenticación es correcta, permitirá una suplantación del usuario remoto para acceder a cualquier cosa que tiene los derechos de acceso bajo el control de dicho LSA (en otras palabras, todo en la máquina local ASP ).

Tan pronto como el proceso ASP que suplanta al usuario hace otro salto a una nueva máquina, que ha dejado el reino controlado por la LSA en el equipo de ASP. La LSA en el equipo de SQL no tiene razones para confiar en la LSA en el equipo de ASP. Por lo que pide a presentar una prueba de que es quien dice que es (el usuario representado). La máquina ASP por desgracia no puede presentar una prueba de este tipo, ya que no tiene el secreto de usuario (su contraseña).

El trabajo en torno a algo que se llama 'delegación restringida'. A través de la delegación restringida del controlador de dominio interviene en la negociación entre LSA máquina del SQL y la máquina LSA ASP y dice 'la máquina ASP está bien, yo respondo por él'. Así confianza máquina LSA del SQL la autenticación y autenticar el comprador original y suplantado.

Los detalles técnicos cómo configurar la delegación restringida se describen en Cómo: Usar el protocolo de Transición y delegación restringida en ASP.NET 2.0

Tenga en cuenta que esto es cierto en cualquier momento una 'doble salto' y la suplantación está involucrado, no importa el tipo de recursos involucrados (puede ser un servidor SQL, puede ser un recurso compartido de archivos, puede ser un nuevo extremo posterior servicio ASP).

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