Partager via


Comment : emprunter l'identité d'un client sur un service

Emprunter l'identité d'un client sur un service Windows Communication Foundation (WCF) permet au service d'exécuter des actions au nom du client. Pour les actions soumises à la vérification de la liste de contrôle d'accès (ACL), telles que l'accès aux répertoires et aux fichiers sur un ordinateur ou l'accès à une base de données SQL Server, la vérification de la liste ACL est effectuée en fonction du compte d'utilisateur client. Cette rubrique décrit les étapes de base requises pour permettre à un client dans un domaine Windows de définir un niveau d'emprunt de l'identité du client. Pour obtenir un exemple fonctionnel, consultez Impersonating the Client. Pour plus d'informations sur le sujet suivant l'emprunt de l'identité du client, consultez Délégation et emprunt d'identité avec WCF.

ms731090.note(fr-fr,VS.100).gifRemarque :
Lorsque le client et le service s'exécutent sur le même ordinateur et que le client s'exécute sous un compte système (c'est-à-dire Local System ou Network Service), il n'est pas possible d'emprunter l'identité du client lorsqu'une session sécurisée est établie avec les jetons de contexte de sécurité avec état. Une application WinForms ou console s'exécute en général sous le compte actuellement connecté, afin que le l'emprunt d'identité du compte puisse être effectué par défaut. Toutefois, lorsque le client est une page ASP.NET et que celle-ci est hébergée dans IIS 6.0 ou IIS 7.0, le client ne s'exécute pas par défaut sous le compte Network Service. Toutes les liaisons fournies par le système qui prennent en charge des sessions sécurisées utilisent par défaut un jeton de contexte de sécurité sans état. Toutefois, si le client est une page ASP.NET et que des sessions sécurisées avec jetons de contexte de sécurité avec état sont utilisées, l'identité du client ne peut pas être empruntée. Pour plus d'informations sur le sujet suivant l'utilisation de jetons de contexte de sécurité avec état dans une session sécurisée, consultez Procédure : créer un jeton de contexte de sécurité pour une session sécurisée.

Pour activer l'emprunt de l'identité d'un client depuis un jeton Windows mis en cache sur un service

  1. Créez le service. Pour obtenir un didacticiel sur cette procédure de base, consultez Didacticiel de mise en route.

  2. Utilisez une liaison qui fait appel à l'authentification Windows et crée une session, telle que NetTcpBinding ou WSHttpBinding.

  3. Lorsque vous créez l'implémentation de l'interface du service, appliquez la classe OperationBehaviorAttribute à la méthode qui requiert l'emprunt de l'identité du client. Affectez Required à la propriété Impersonation.

    <OperationBehavior(Impersonation := ImpersonationOption.Required)>  _
    Public Function Add(ByVal a As Double, ByVal b As Double) As Double _
       Implements ICalculator.Add
        Return a + b
    End Function 
    
    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public double Add(double a, double b)
    {
        return a + b;
    }
    

Pour définir le niveau d'emprunt d'identité autorisé sur le client

  1. Créez le code client du service à l'aide de Outil Service Model Metadata Tool (Svcutil.exe). Pour plus d'informations, consultez Accès aux services à l'aide d'un client WCF.

  2. Après avoir créé le client WCF, affectez à la propriété AllowedImpersonationLevel de la classe WindowsClientCredential l'une des valeurs d'énumération TokenImpersonationLevel.

    ms731090.note(fr-fr,VS.100).gifRemarque :
    Pour utiliser Delegation, l'authentification Kerberos négociée (parfois appelée Kerberos multi-leg ou multi-step) doit être utilisée. Pour savoir comment procéder, consultez Meilleures pratiques pour la sécurité dans WCF.

    Dim client As New CalculatorClient("CalculatorEndpoint")
    client.ClientCredentials.Windows.AllowedImpersonationLevel = _
        System.Security.Principal.TokenImpersonationLevel.Impersonation
    
    CalculatorClient client = new CalculatorClient("CalculatorEndpoint");
    client.ClientCredentials.Windows.AllowedImpersonationLevel =
        System.Security.Principal.TokenImpersonationLevel.Impersonation;
    

Voir aussi

Tâches

Impersonating the Client

Référence

OperationBehaviorAttribute
TokenImpersonationLevel

Concepts

Délégation et emprunt d'identité avec WCF