usuario sitio publicar permitir permisos identidad grupo externas directorio crear configurar conexiones aplicaciones aplicacion anonimo authentication iis-7 active-directory kerberos

authentication - sitio - Configure la Autenticación de Kerberos con la Delegación en IIS 7 con Windows Server 2008



usuario anonimo iis (3)

Situación:

Tengo un servicio web .NET asmx implementado en mi servidor web. Este servicio llama a un servicio en otro servidor (nuestro servidor de SharePoint, si es relevante). Deseo suplantar / delegar la llamada al servicio de SharePoint desde mi servicio web utilizando las credenciales del cliente.

Problema:

Recibo una respuesta 401 del servicio de SharePoint cuando llamo a MI servicio web y llama a SharePoint.

Preparar:

  • Mi servidor web ejecuta IIS 7. El grupo de aplicaciones se ejecuta en "Servicio de red"
  • En mi controlador de dominio de Windows Server 2003, el servidor web tiene habilitada la opción "Trusted for Delegation (Kerberos Only)".
  • En ISS, mi aplicación tiene la autenticación anónima desactivada, la suplantación habilitada y la autenticación de Windows habilitada con los tres proveedores habilitados (Negociar: Kerberos, Negociar y NTLM)
  • El servidor de SharePoint está configurado con Habilitado anónimo, Suplantación de identidad habilitada y Autenticación de Windows habilitada con SOLO proveedor NTLM habilitado.

Puedo ver en los registros de SharePoint que cuando ejecuto localmente en Visual Studio se pasa un nombre de usuario (y el servicio funciona correctamente) pero cuando lo ejecuto en el servidor web NO hay ningún nombre de usuario en el archivo de registro y aparece un error 401

¿Qué configuración estoy mal para hacer que funcione la delegación de Kerberos?

Ideas? ¡Gracias!


La delegación requiere Kerberos. Tendrá que hacer que el servidor de SharePoint admita la autenticación con Kerberos.


Prueba esto:

Mover Negotiate a la parte superior de la lista de proveedores. Y, en el archivo applicationHost.config usualmente en C:/Windows/System32/inetsrv/config , agregue useKernelMode="true" useAppPoolCredentials="true" a la etiqueta <windowsAuthentication> debajo de la etiqueta <location> para su aplicación, como a continuación :

<location path="YOUR_APPLICATION_PATH"> <system.webServer> <security> <authentication> <anonymousAuthentication enabled="false" /> <windowsAuthentication enabled="true" useKernelMode="true" useAppPoolCredentials="true"> <providers> <clear /> <add value="Negotiate" /> <add value="NTLM" /> </providers> </windowsAuthentication> </authentication> </security> </system.webServer> </location>


Plataforma:

Usando IIS7 esto es lo que hice en AMBOS servidores. El primer servidor y el segundo al que queremos que la autenticación Kerberos "salte".

Paso 1:

Para el sitio de IIS que tiene los servicios en los que está llamando (en cada servidor) vaya al administrador de IIS, haga clic en el sitio a la izquierda debajo de Conexiones y abra la sección "Autenticación" en IIS. Establezca "Suplantación de ASP.NET" en Activado y "Autenticación de Windows" en Habilitado. Todas las otras opciones en Autenticación (Ananymous, Formularios, etc.) se deben establecer en Desactivado.

En "Autenticación de Windows", haga clic con el botón derecho y seleccione "Proveedores". Establezca el único proveedor como "Negociar: Kerberos" (Esto obliga a Kerberos. Si lo desea, después de obtener Kerberos funcionando, puede usar los proveedores "Negociar" y "NTLM" y eliminar "Negociar: Kerberos" para que los clientes no puedan Kerberos puede conectarse. Nota: actualmente tengo el mío configurado para "Negociar" y "NTLM" y parece funcionar.

En "Autenticación de Windows", haga clic derecho y seleccione "Configuración avanzada". Desmarque la casilla "Habilitar el modo Kernal". (Mi opción de protección extendida estaba desactivada, no intenté con nada más)

Paso 2:

Para cada servidor, debe configurar SPN. Los SPN serían los siguientes (ya sea A o B):

UN:

Si su grupo de aplicaciones se ejecuta con una IDENTIDAD que es una CUENTA DE DOMINIO, agregue los siguientes SPN a ESA CUENTA DE DOMINIO en el controlador de dominio.

http/COMPUTER_NETBIOS_NAME http/COMPUTER_NETBIOS_NAME.FULLY_QUALIFIED_DOMAIN_NAME http://COMPUTER_NETBIOS_NAME.FULLY_QUALIFIED_DOMAIN_NAME

(Si no se está ejecutando en el puerto predeterminado, también agregue 3 entradas adicionales con el nombre del puerto adjunto: http / COMPUTER_NETBIOS_NAME: PORT, etc.)

SEGUNDO:

Si su grupo de aplicaciones se ejecuta bajo IDENTITY "NetworkService", agregue los mismos SPN que los anteriores, excepto que reemplace "http" por "HOST", PERO AÑADIRLO A COMPUTER_NETBIOS_NAME en su controlador de dominio.

Todavía estoy trabajando para implementar esto en producción, pero esto es lo que funciona para mí en mi entorno de prueba. Mantendré esto actualizado mientras descubro más.

Nota:

Esto funciona si está utilizando COMPUTER_NETBIOS_NAME directamente en la url cuando se conecta. Si está usando un alias (www.mysite.mydomain.com) o la dirección IP directamente, esto no funcionará. Creo que, aunque no lo he probado por completo, debería seguir los pasos anteriores, pero reemplace COMPUTER_NETBIOS_NAME con el alias o la dirección IP al agregar los SPN. (o añádelo tanto con netbios como con el alias / ip, no muy seguro)

Además, si obtiene un error acerca de que una configuración no es válida para integrarse ... después de activar la "Suplantación de identidad de ASP.NET", es posible que deba agregar

<validation validateIntegratedModeConfiguration="false" />

a su web.config en la sección system.webServer