WCF et l'Authentification Kerberos

J'ai suivi de nombreux articles msdn et la codeplex des conseils, mais ne peut pas obtenir de la WCF pour travailler avec l'authentification Kerberos et de délégation et de apprécierais un peu d'aide.

Installation

J'ai le service WCF dans un site web IIS sur une machine distante

  • IIS 6.0 sur Windows 2003 R2 sp2
  • Le nom principal de service pour la machine a été ajouté (http/monserveur && http/myserver:8080)
  • Une ANNONCE compte a été créé pour le pool d'applications IIS
  • Le compte d'ANNONCE a la mise en, permettre de délégation (Kerberos), affectez la valeur true

Je suis en utilisant Brian Stand de débogage du site sur 8080 et le site passe à toutes les exigences de la délégation Kerberos. Le débogage site IIS authentification anonyme off, et l'authentification Intégrée de Windows.

J'ai en miroir de ces paramètres sur le site hébergeant le service WCF.

Service Web - Web Config (D'Origine)

<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>

Service Web - Web Méthode

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string GetCurrentUserName()
{
    string name = WindowsIdentity.GetCurrent().Name;
    return name;
}

Client App - App Config

<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>

Erreur D'Application

L'erreur suivante se produit lors de mon test de l'application, une application WinForms, essaie d'appeler la méthode web:

"La requête HTTP est autorisée avec
le schéma d'authentification client
"Anonyme". L'en-tête d'authentification
reçu du serveur a été
"Negotiate,NTLM"."

Journal Des Événements

L'erreur suivante dans le journal des événements:

Exception:
Système.ServiceModel.ServiceActivationException:
Le " service/Service.svc' ne peut pas être
activé en raison d'une exception lors de l'
la compilation. Le message d'exception
est: les paramètres de Sécurité de ce service
require 'Anonyme' Authentification, mais
il n'est pas activé pour l'IIS
application qui héberge ce service.

Dont je ne comprends pas. Le point entier de ce service est de ne pas permettre l'authentification anonyme, chaque utilisateur/demande doit être authentifié à l'aide de tickets Kerberos, puis de les transférer à d'autres machines.

Comment dois-je configurer ce service WCF pour l'authentification Kerberos et la délégation?

Révision 1

Après la lecture de cette SORTE de question j'ai enlevé le point de terminaison de métadonnées. Cela n'a pas résolu le problème.

Révision 2

Après plusieurs recherches, j'ai trouvé quelques posts suggérant de changer wsHttpBinding à basicHttpBinding. La modification de la partie du web.config a été inclus ci-dessous, et le point de terminaison de service a été mis à jour pour faire référence à cette liaison.

Service Web - Web Config (Révisée)

<basicHttpBinding>
    <binding name="basicBindingConfig">
        <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" 
                proxyCredentialType="Windows" 
                realm="" />
        </security>
    </binding>
</basicHttpBinding>

Client App - App Config (Révisée)

<!-- ... -->
<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Windows" 
        proxyCredentialType="Windows"
        realm="" />
    <message clientCredentialType="UserName" 
        algorithmSuite="Default" />
</security>
<!-- ... -->

Erreur (Révisée)

L'erreur actuelle ressemble, il contient un en-tête d'authentification Kerberos.

La requête HTTP est autorisée avec
le schéma d'authentification client
'Négocier'. L'en-tête d'authentification
reçu du serveur a été
'Négocier SOMEHUGESCARYKEYHERE

Remarque, j'ai posté et supprimé quelque chose de similaire hier, ce poste comprend des révisions basées sur plus de recherche et devrait être un nettoyant pour le lire.
J'ai ajouté la version révisée de l'app config basée sur marc_s commentaires.

OriginalL'auteur blu | 2009-08-18