Partager via


Procédure : emprunter l’identité d’un client sur un service

L’emprunt de 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 l’emprunt d’identité de client, consultez Délégation et emprunt d’identité.

Notes

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 s’exécute 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’emprunt de l’identité du client est impossible. Pour plus d’informations sur l’utilisation de jetons de contexte de sécurité avec état dans une session sécurisée, consultez Guide pratique pour 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 Getting Started Tutorial.

  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. Définissez la propriété Impersonation sur Required.

    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public double Add(double a, double b)
    {
        return a + b;
    }
    
    <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
    

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

  1. Créez le code client du service à l’aide de ServiceModel Metadata Utility 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.

    Notes

    Pour utiliser Delegation, l'authentification Kerberos négociée (parfois appelée Kerberos multi-leg ou multi-step ) doit être utilisée. Pour obtenir une description de l’implémentation de ce problème, consultez Meilleures pratiques pour la sécurité.

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

Voir aussi