Vorgehensweise: Annahme der Clientidentität durch einen Dienst

Wenn ein WCF-Dienst (Windows Communication Foundation) die Identität eines Clients annimmt, kann der Dienst Aktionen im Namen des Clients durchführen. 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. 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. Ein funktionsfähiges Beispiel hierfür finden Sie unter Impersonating the Client. Weitere Informationen zum Clientidentitätswechsel finden Sie unter Delegierung und Identitätswechsel.

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. 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. Wenn es sich bei dem Client jedoch um eine ASP.NET-Seite handelt, die in IIS 6.0 oder IIS 7.0 gehostet wird, wird der Client standardmäßig unter dem Network Service-Konto ausgeführt. Alle vom System bereitgestellten Bindungen, die Sicherheitssitzungen unterstützen, verwenden standardmäßig ein zustandsloses Token für den Sicherheitskontext. Wenn es sich bei dem Client jedoch um eine ASP.NET-Seite handelt und sichere Sitzungen mit zustandsbehafteten Sicherheitskontexttoken verwendet werden, kann kein Clientidentitätswechsel durchgeführt werden. Weitere Informationen zur Verwendung zustandsbehafteter Sicherheitskontexttoken in einer sicheren Sitzung finden Sie unter Vorgehensweise: Erstellen eines Tokens für den Sicherheitskontext einer sicheren Sitzung.

So aktivieren Sie die Annahme der Clientidentität durch einen Dienst über ein Windows-Token im Cache-Speicher

  1. Erstellen Sie den Dienst. Ein Lernprogramm für diesen grundlegenden Vorgang finden Sie unter Getting Started Tutorial.

  2. Verwenden Sie eine Bindung, die die Windows-Authentifizierung verwendet und eine Sitzung erstellt, z. B. NetTcpBinding oder 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. Setzen Sie die Impersonation-Eigenschaft auf 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 fest

  1. Erstellen Sie Dienstclientcode mit dem ServiceModel Metadata Utility Tool (Svcutil.exe). Weitere Informationen finden Sie unter Zugreifen auf Dienste mithilfe eines WCF-Clients.

  2. Nachdem Sie den WCF-Client erstellt haben, legen Sie für die AllowedImpersonationLevel-Eigenschaft der WindowsClientCredential-Klasse einen der TokenImpersonationLevel-Enumerationswerte fest.

    Hinweis

    Damit Delegationverwendet werden kann, muss die ausgehandelte Kerberos-Authentifizierung (auch bilateraler oder mehrstufiger Kerberos-Prozess genannt) verwendet werden. Eine Beschreibung der Implementierung finden Sie unter Bewährte Methoden für Sicherheit.

    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
    

Weitere Informationen