Vorgehensweise: Annahme der Clientidentität durch einen Dienst
Nimmt ein Windows Communication Foundation (WCF)-Dienst die Identität eines Clients an, 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 funktionierendes Beispiel hierfür finden Sie unter Impersonating the Client. Weitere Informationen über zum Clientidentitätswechsel finden Sie unter Delegierung und Identitätswechsel mit WCF.
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 auf 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 Sicherheitsverbindungen mit Token für den Sicherheitszustandskontext verwendet werden, kann kein Clientidentitätswechsel durchgeführt werden. Weitere Informationen über die Verwendung von Token für den Sicherheitszustandskontext in Sicherheitssitzungen 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
Erstellen Sie den Dienst. Ein Lernprogramm für diesen grundlegenden Vorgang finden Sie unter Lernprogramm "Erste Schritte".
Verwenden Sie eine Bindung, die die Windows-Authentifizierung verwendet und eine Sitzung erstellt, z. B. NetTcpBinding oder WSHttpBinding.
Wenden Sie beim Erstellen der Implementierung der Dienstschnittstelle die OperationBehaviorAttribute-Klasse auf die Methode an, für die ein Clientidentitätswechsel erforderlich ist. Legen Sie für die Impersonation-Eigenschaft den Wert Required fest.
<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; }
So legen Sie die zulässige Ebene des Identitätswechsels auf dem Client fest
Erstellen Sie Dienstclientcode mit dem ServiceModel Metadata Utility-Tool (Svcutil.exe). Weitere Informationen finden Sie unter Zugreifen auf Dienste mithilfe eines WCF-Clients.
Nachdem Sie den WCF-Client erstellt haben, legen Sie für die AllowedImpersonationLevel-Eigenschaft der WindowsClientCredential-Klasse einen der TokenImpersonationLevel-Enumerationswerte fest.
Hinweis: Damit Delegation verwendet werden kann, muss die ausgehandelte Kerberos-Authentifizierung (auch bilateraler oder mehrstufiger Kerberos-Prozess genannt) verwendet werden. Eine Beschreibung des Implementierungsvorgangs finden Sie unter Best Practices für Sicherheit in 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;
Siehe auch
Aufgaben
Verweis
OperationBehaviorAttribute
TokenImpersonationLevel