Tengo una ASP.NET 4.0 de la aplicación en la que tengo que reenviar la autenticación a la base de datos.
Para los fines de esta solicitud de ayuda, permite llamar al servidor web de app1 y el servidor de base de datos «sql1».

La SQL2008R2 servicio de base de datos se ejecuta como una instancia denominada «SQL2008R2» en virtud de una cuenta del dominio personalizado «SqlServer». El servidor se está ejecutando Windows Server 2008 R2 Enterprise Edition.
He creado un SPN para este…

setspn -a MSSQLSvc/sql1.mydomain.local:SQL2008R2 SqlServer

La ASP.NET la aplicación se ejecuta en un grupo de aplicaciones con una cuenta del dominio personalizado «WebApplicationUser», Integrado en el modo de Canalización. Se está ejecutando actualmente en mi portátil con Windows 7 Enterprise, pero finalmente será alojada en Windows Server 2008 R2 Standard Edition.
He creado 2 SPN para la aplicación (en la máquina de Windows 7 que actualmente estoy ejecutando desde)…

setspn -a http/app1 WebApplicationUser
setspn -a http/app1.mydomain.local WebApplicationUser

Dentro de Active Directory usuarios y Equipos, he seleccionado la opción de «WebApplicationUser» cuenta y he habilitado la delegación restringida a «MSSQLSvc/sql1.mydomain.local:SQL2008R2» usando cualquier protocolo (también he probado con Kerbero sólo).

La Aplicación de configuración de IIS 7.5 y la autenticación se establece para deshabilitar Anonymouse, Basic, Digest y Formas a la vez, permiten «ASP.NET la Suplantación» y «Windows». La autenticación de Windows «se ha Extendido la protección de» apaga y «autenticación de modo de Núcleo» habilitado. Los proveedores de «Negociar» y «NTLM» en ese orden.

La ASP.NET la aplicación utiliza EF, y la cadena de conexión está configurada para usar seguridad integrada…

<connectionStrings>
    <add name="MyContext"
             connectionString="metadata=res://*/Data.MyModel.csdl|res://*/Data.MyModel.ssdl|res://*/Data.MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=sql1.mydomain.local\sql2008r2;Initial Catalog=MyDatabase;Persist Security Info=false;Integrated Security=True;MultipleActiveResultSets=True&quot;"
             providerName="System.Data.EntityClient" />
</connectionStrings>

Mi web de configuración especifica la autenticación de Windows y suplantación de la identidad, desde que tengo uso de async páginas, también he habilitado inpersonation política que fluye…

<runtime>
    <alwaysFlowImpersonationPolicy enabled="true" />
</runtime>

<system.web>
    <authentication mode="Windows" />
    <identity impersonate="true" />
</system.web>

Si puedo iniciar sesión de forma local (en «web1») y vaya a la aplicación (usando IE), todo esto funciona – pero esto no implica que el doble salto que estoy tratando de resolver.

Si me inicie sesión en otro equipo y, a continuación, vaya a la aplicación que utiliza IE, o puedo navegar desde la máquina local usando FireFox, esto no funciona – nota: FireFox no preguntar por los detalles de inicio de sesión. La conexión a la base de datos falla con «error de inicio de Sesión del usuario ‘NT AUTHORITY\ANONYMOUS LOGON'»

A diferencia de muchos de los artículos (y aquí podría ser parte del problema), no estoy usando ningún código personalizado para suplantar al usuario. Es mi entendimiento de que la suplantación de la personalidad será aplicado a través de la junta a la solicitud por la web.la configuración anterior. Todo lo que hago es abrir la conexión y, a continuación, ciérrelo de nuevo cuando he terminado con ella.

Yo obviamente han perdido un paso (o dos), pero después de haber visto toda la documentación que se puede encontrar (y no ha sido mucho), todavía no puedo encontrar lo que paso. No ayuda el hecho de que el 99% de la documentación que puedo encontrar es en realidad relacionados con IIS6 y Windows 2003, pero los principios siguen siendo los mismos.

Que nadie ha tenido éxito en la obtención de dicha configuración para funcionar en Windows 7 y Windows Server 2008?

Habilitar el registro de sucesos de Kerberos en la web y servidor de base de datos: support.microsoft.com/kb/262177?wa=wsignin1.0 El visor de sucesos es la clave para encontrar y reparar los errores de kerberos.
He habilitado este, y también se descarga la herramienta Monitor de Red, pero todavía no puedo ver la información suficiente para que me diga lo que está mal. Supongo que no estoy leyendo algo correctamente como no tengo ninguna duda de que la respuesta está ahí.

OriginalEl autor Martin Robins | 2012-12-04

2 Comentarios

  1. 7

    Lista de verificación para Salto Doble cuestiones {IIS y SQL Server}

    http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx

    http://www.phishthis.com/2009/10/24/how-to-configure-ad-sql-and-iis-for-two-hop-kerberos-authentication-2/

    http://support.microsoft.com/kb/810572

    IIS para SQL Server kerberos autenticación de problemas

    He visto un par de estos ya, y ahora trató de los consejos de los demás. Por desgracia todavía no puedo conseguir que esto funcione.
    El proveedor de Autenticación de Windows en IIS7 debe ser establecido a Negociar:Kerberos, no NTLM. Esto significa que el Núcleo del modo de configuración de la autenticación debe estar desactivado. blog.toque de diana.org.reino unido/2010/01/asp-net-la suplantación de la delegación
    Joe; tienes razón – fue el de «Negociar:Kerberos» que no fue demostrado en cualquiera de los demás documentación que he encontrado – probablemente porque AFAIK que es nuevo para IIS7+ y toda la documentación está IIS6.
    He pasado un par de días tratando de resolver este maldito DH problema. Saludos para el heads up!

    OriginalEl autor Joe

  2. 6

    Al configurar el Spn para SQL Server, nos hemos encontrado con que tenemos que incluir el PUERTO en el que escucha SQL Server (1433).

    Usted debe descargar y utilizar Brian Stand DelegConfig v2 herramienta para ayudar a configurar los ajustes de configuración correctos. http://blogs.iis.net/brian-murphy-booth/archive/2009/04/22/delegconfig-v2-beta.aspx

    Es básicamente mantener la mano todo el camino a través del proceso. Hemos encontrado la herramienta inestimable.

    Me he descargado la herramienta. Mientras que es muy bueno, me dice que la configuración es correcta, pero cuando se trate de una prueba de acceso a una tabla dentro de la base de datos me sale el mismo mensaje de error de inicio de sesión.
    Mi consejo es sustituir SQL2008R2 con el puerto 1433. setspn -a MSSQLSvc/sql1.mydomain.local:1433 SqlServer
    Juan, que estaban en lo correcto acerca de la SPN demasiado; me había nombrado a instancia de SPN, pero tan pronto como eliminarlos y crear una única SPN para el host.fqdn:1433 esto ayudó.
    Me alegro de oírlo. Gracias por la upvote!

    OriginalEl autor John Ruiz

Dejar respuesta

Please enter your comment!
Please enter your name here