He seguido numerosos artículos msdn y la guía codeplex, pero no puedo conseguir que WCF funcione con la autenticación y delegación de Kerberos y agradecería un poco de ayuda.WCF and Kerberos Authentication
Configuración
tengo el servicio de WCF en un sitio web de IIS en una máquina remota
- IIS 6.0 en Windows 2003 R2 - SP 2
- El SPN para la máquina se ha añadido (http/myserver & & http/myserver: 8080)
- Se ha creado una cuenta AD para el grupo de aplicaciones IIS
- La cuenta de AD tiene el ajuste, permitir la delegación (para Kerberos), se define como true
estoy usando Brian Booth's debug site en 8080 y el sitio cumple todos los requisitos para la delegación Kerberos. El sitio de depuración de IIS tiene autenticación anónima desactivada y autenticación de Windows integrada activada.
He duplicado estas configuraciones en el sitio que aloja el servicio WCF.
Servicio Web - Web Config (original)
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WsHttpBindingConfig">
<security>
<message negotiateServiceCredential="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehavior" name="Service">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="WsHttpBindingConfig"
contract="IService">
<identity>
<servicePrincipalName value="http/myserver" />
<dns value="" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceAuthorization
impersonateCallerForAllOperations="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Servicio Web - Método Web
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string GetCurrentUserName()
{
string name = WindowsIdentity.GetCurrent().Name;
return name;
}
cliente de App - Aplicación de configuración
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IService"
... />
...
<security mode="Message">
<transport clientCredentialType="Windows"
proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows"
negotiateServiceCredential="true"
algorithmSuite="Default"
establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://myserver/Service.svc"
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IService"
contract="KerberosService.IService"
name="WSHttpBinding_IService">
<identity>
<servicePrincipalName value="http/myserver" />
</identity>
</endpoint>
</client>
</system.serviceModel>
Error de aplicación
El siguiente error se produce cuando mi aplicación de prueba, una aplicación de Windows Forms, intenta llamar al método Web:
"La petición HTTP no está autorizado con el esquema de autenticación cliente 'Anonymous' . El encabezado de autenticación recibida del servidor era 'negociar, NTLM "
registro de eventos
el siguiente error en el registro de eventos:.
Excepción: Sistema .ServiceModel.ServiceActivationException: El servicio '/Service.svc' no puede ser activado debido a una excepción durante compila ción. El mensaje de excepción es: La configuración de seguridad para este servicio requiere autenticación 'anónima' pero no está habilitada para la aplicación IIS que aloja este servicio.
Lo que no entiendo. El objetivo de este servicio es no permitir la autenticación anónima, cada usuario/solicitud debe autenticarse utilizando tickets de Kerberos, y luego pasarlos a otras máquinas.
¿Cómo debo configurar este servicio WCF para la autenticación y delegación de Kerberos?
Revisión 1
Después de leer this SO question Quité el punto final de metadatos. Esto no ha resuelto el problema.
Revisión 2
Después de más investigación me encontré con un par de mensajes que sugieren que cambiar wsHttpBinding a basicHttpBinding. La modificación de esa parte del web.config se ha incluido a continuación, y el punto final del servicio se ha actualizado para hacer referencia a ese enlace. Servicio
Web - Web Config (revisado)
<basicHttpBinding>
<binding name="basicBindingConfig">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"
proxyCredentialType="Windows"
realm="" />
</security>
</binding>
</basicHttpBinding>
cliente de App - Aplicación de configuración (revisado)
<!-- ... -->
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"
proxyCredentialType="Windows"
realm="" />
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
<!-- ... -->
error (revisado)
La corriente el error parece que contiene una autenticación de Kerberos encabezado de ntication
La petición HTTP no está autorizado con el esquema de autenticación del cliente 'negociar'. El encabezado de autenticación recibida del servidor era 'Negociar SOMEHUGESCARYKEYHERE
Nota, publiqué y borré algo similar ayer, esta publicación incluye revisiones basadas en más investigaciones y debería ser más clara para leer. – blu
Agregué la configuración de la aplicación revisada en función de los comentarios de marc_s. – blu