asp.net wcf impersonation kerberos

asp.net - ¿Cómo puedo solucionar el problema de doble salto de Kerberos?



wcf impersonation (2)

El servidor intermedio debe ser confiable para la delegación. De lo contrario, no se delegará ninguna credencial y el servidor intermedio no podrá suplantar al cliente original.

Tengo problemas para llamar a un servicio web desde una aplicación web y esperaba que alguien aquí pudiera ayudarlo. Por lo que puedo decir, esto parece tener algo que ver con el problema de doble salto de Kerberos. Sin embargo, si lo es, no estoy seguro de qué hacer para solucionar el problema. Para hacer las cosas más difíciles, no tengo los permisos adecuados para realizar cambios en las cuentas de Active Directory, así que necesito saber qué preguntar cuando solicite cambios. En mi situación, necesito pasar las credenciales (Autenticación integrada de Windows) de una aplicación web a un servicio web back-end para que el servicio web se ejecute en el contexto de usuario adecuado.

Aquí está mi problema exacto:

Esto funciona

Esto no funciona

La única diferencia entre el escenario de trabajo y el que no funciona es que el escenario de trabajo ejecuta la aplicación en el host local (ya sea en la PC de un desarrollador o en el servidor en cuestión) y el ejemplo que no funciona se ejecuta en otra máquina. El código entre ambos escenarios es exactamente el mismo.

Lo que he intentado

  1. Agregar un SPN a la cuenta de dominio que ejecuta el grupo de aplicaciones para cada servidor setspn -a http/server1 DOMAIN/account
  2. Diferentes métodos de suplantación
  3. Eliminar el código de suplantación using(...) y ejecutar la llamada al servicio web como la cuenta del grupo de aplicaciones. Esto funciona como se esperaba

¿Alguien tiene alguna idea de lo que podría hacer para solucionar este problema?


La mayoría de las veces, el motivo es que el Servidor 1 no pasa un token de delegación al Servidor 2. Entonces, cuando el Servidor 2 intenta usar ese ticket de autenticación para ir a otro lugar (probablemente un servidor SQL) falla.

Debe establecer el nivel de suplantación para la llamada WCF

ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation

http://msdn.microsoft.com/en-us/library/system.servicemodel.security.windowsclientcredential.allowedimpersonationlevel.aspx