Vorgehensweise: Annahme der Clientidentität durch einen DienstHow to: Impersonate a Client on a Service

Identität eines Clients auf einen Windows Communication Foundation (WCF)-Dienst kann der Dienst Aktionen im Auftrag des Clients durchführen.Impersonating a client on a Windows Communication Foundation (WCF) service enables the service to perform actions on behalf of the client. Bei Aktionen, die einer ACL-Überprüfung (ACL = Access Control List, Zugriffssteuerungsliste) unterliegen, wie der Zugriff auf Verzeichnisse und Dateien auf einem Computer oder der Zugriff auf eine SQL Server-Datenbank, wird die ACL-Überprüfung für das Clientbenutzerkonto durchgeführt.For actions subject to access control list (ACL) checks, such as access to directories and files on a machine or access to a SQL Server database, the ACL check is against the client user account. In diesem Thema werden die grundlegenden Schritte vorgestellt, die für die Aktivierung eines Clients in einer Windows-Domäne erforderlich sind, damit eine Ebene für den Clientidentitätswechsel festgelegt werden kann.This topic shows the basic steps required to enable a client in a Windows domain to set a client impersonation level. Ein funktionsfähiges Beispiel hierfür finden Sie unter Impersonating the Client.For a working example of this, see Impersonating the Client. Weitere Informationen zum Clientidentitätswechsel finden Sie unter Delegierung und Identitätswechsel.For more information about client impersonation, see Delegation and Impersonation.

Hinweis

Wenn Client und Dienst auf demselben Computer ausgeführt werden und der Client unter einem Systemkonto (das heißt unter Local System oder Network Service) ausgeführt wird, kann kein Clientidentitätswechsel vorgenommen werden, wenn mit Token für den Sicherheitszustandskontext eine Sicherheitsverbindung hergestellt wird.When the client and service are running on the same computer and the client is running under a system account (that is, Local System or Network Service), the client cannot be impersonated when a secure session is established with stateful Security Context tokens. Eine Windows Forms- oder Konsolenanwendung wird in der Regel unter dem derzeit angemeldeten Konto ausgeführt, sodass für dieses Konto standardmäßig ein Identitätswechsel durchgeführt werden kann.A WinForms or console application typically is run under the currently logged in account, so that account can be impersonated by default. Wenn es sich bei dem Client jedoch um eine ASP.NETASP.NET -Seite handelt, die auf IIS 6.0IIS 6.0 oder IIS 7.0 gehostet wird, wird der Client standardmäßig unter dem Network Service -Konto ausgeführt.However, when the client is an ASP.NETASP.NET page and that page is hosted in IIS 6.0IIS 6.0 or IIS 7.0, then the client does run under the Network Service account by default. Alle vom System bereitgestellten Bindungen, die Sicherheitssitzungen unterstützen, verwenden standardmäßig ein zustandsloses Token für den Sicherheitskontext.All of the system-provided bindings that support secure sessions use a stateless Security Context token by default. Wenn es sich bei dem Client jedoch um eine ASP.NETASP.NET -Seite handelt und sichere Sitzungen mit Sicherheitskontexttoken verwendet werden, kann kein Clientidentitätswechsel durchgeführt werden.However, if the client is an ASP.NETASP.NET page and secure sessions with stateful Security Context tokens are used, the client cannot be impersonated. Weitere Informationen zur Verwendung von zustandsbehafteten Sicherheitskontexttoken in einer sicheren Sitzung finden Sie unter Vorgehensweise: Erstellen Sie ein Sicherheitskontexttoken für eine Sicherheitssitzung.For more information about using stateful Security Context tokens in a secure session, see How to: Create a Security Context Token for a Secure Session.

So aktivieren Sie die Annahme der Clientidentität durch einen Dienst über ein Windows-Token im Cache-SpeicherTo enable impersonation of a client from a cached Windows token on a service

  1. Erstellen Sie den Dienst.Create the service. Ein Lernprogramm für diesen grundlegenden Vorgang finden Sie unter Getting Started Tutorial.For a tutorial of this basic procedure, see Getting Started Tutorial.

  2. Verwenden Sie eine Bindung, die die Windows-Authentifizierung verwendet und eine Sitzung erstellt, z. B. NetTcpBinding oder WSHttpBinding.Use a binding that uses Windows authentication and creates a session, such as NetTcpBinding or WSHttpBinding.

  3. Wenden Sie beim Erstellen der Implementierung der Dienstschnittstelle die OperationBehaviorAttribute -Klasse auf die Methode an, für die ein Clientidentitätswechsel erforderlich ist.When creating the implementation of the service's interface, apply the OperationBehaviorAttribute class to the method that requires client impersonation. Legen Sie die Impersonation -Eigenschaft auf Requiredfest.Set the Impersonation property to 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 
    

So legen Sie die zulässige Ebene des Identitätswechsels auf dem Client festTo set the allowed impersonation level on the client

  1. Erstellen Sie Dienstclientcode mit dem ServiceModel Metadata Utility Tool (Svcutil.exe).Create service client code by using the ServiceModel Metadata Utility Tool (Svcutil.exe). Weitere Informationen finden Sie unter beim Zugriff auf Dienste, die mithilfe eines WCF-Clients.For more information, see Accessing Services Using a WCF Client.

  2. Legen Sie nach dem Erstellen des WCF-Clients können die AllowedImpersonationLevel Eigenschaft von der WindowsClientCredential -Klasse auf einen der der TokenImpersonationLevel Enumerationswerte.After creating the WCF client, set the AllowedImpersonationLevel property of the WindowsClientCredential class to one of the TokenImpersonationLevel enumeration values.

    Hinweis

    Damit Delegationverwendet werden kann, muss die ausgehandelte Kerberos-Authentifizierung (auch bilateraler oder mehrstufiger Kerberos-Prozess genannt) verwendet werden.To use Delegation, negotiated Kerberos authentication (sometimes called multi-leg or multi-step Kerberos) must be used. Eine Beschreibung des Implementierungsvorgangs finden Sie in Best Practices für Sicherheit.For a description of how to implement this, see Best Practices for Security.

    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
    

Siehe auchSee Also

OperationBehaviorAttribute
TokenImpersonationLevel
Durchführen eines Identitätswechsels für den ClientImpersonating the Client
Delegierung und IdentitätswechselDelegation and Impersonation