Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird gezeigt, wie benutzerdefinierte Client- und Dienstanmeldeinformationen implementiert und benutzerdefinierte Anmeldeinformationen aus Anwendungscode genutzt werden.
Erweiterbarkeitsklassen für Anmeldeinformationen
Die Klassen ClientCredentials und ServiceCredentials sind Haupteinstiegspunkte für die Windows Communication Foundation (WCF)-Sicherheitserweiterbarkeit. Diese Anmeldeinformationsklassen stellen die APIs bereit, die es dem Anmeldecode ermöglichen, Anmeldeinformationen einzurichten und Anmeldeinformationstypen in Sicherheitstoken zu konvertieren. ((Sicherheitstoken werden genutzt, um innerhalb von SOAP-Nachrichten Anmeldeinformationen zu übertragen.) Die Verantwortungsbereiche dieser Klassen von Anmeldeinformationen können in zwei Bereiche geteilt werden:
- Bereitstellung der APIs für Anwendungen zur Einrichtung von Anmeldeinformationen.
- Funktion als Factory für SecurityTokenManager-Implementierungen.
Sowohl die ClientCredentials- als auch die ServiceCredentials-Klasse erben von der abstrakten SecurityCredentialsManager-Klasse, die den Vertrag für die Rückgabe des SecurityTokenManager definieren.
Weitere Informationen über die Klassen von Anmeldeinformationen und wie sie in die WCF-Sicherheitsarchitektur passen, finden Sie unter Sicherheitsarchitektur.
Die in WCF bereitgestellten Standardimplementierungen unterstützen die vom System bereitgestellten Anmeldeinformationstypen und erstellen einen Sicherheitstoken-Manager, der in der Lage ist, diese Anmeldeinformationstypen zu handhaben.
Gründe für eine Anpassung
Es gibt mehrere Gründe für die Anpassung von Client- oder Dienstanmeldeinformationsklassen. Im Vordergrund steht die Notwendigkeit der Änderung des standardmäßigen WCF-Sicherheitsverhaltens in Bezug auf die Handhabung der vom System bereitgestellten Anmeldeinformationstypen, insbesondere aus folgenden Gründen:
- Der Bedarf an Änderungen, die mit anderen Erweiterbarkeitspunkten nicht möglich sind.
- Die Notwendigkeit des Hinzufügens neuer Anmeldeinformationstypen.
- Die Notwendigkeit des Hinzufügens neuer benutzerdefinierter Typen von Sicherheitstoken.
Dieses Thema beschreibt, wie benutzerdefinierte Client- und Dienstanmeldeinformationen implementiert und aus Anwendungscode genutzt werden.
Zuerst
Die Erstellung einer benutzerdefinierten Anmeldeinformationsklasse ist nur der erste Schritt, da der Grund für die Anpassung von Anmeldeinformationen in der Änderung des WCF-Verhaltens in Bezug auf die Bereitstellung von Anmeldeinformationen, die Serialisierung von Sicherheitstoken oder die Authentifizierung liegt. Andere Themen in diesem Abschnitt beschreiben, wie benutzerdefinierte Serialisierungsprogramme und Authentifizierer erstellt werden. In diesem Zusammenhang ist die Erstellung benutzerdefinierter Anmeldeinformationsklassen das erste Thema in der Reihe. Nachfolgende Aktionen (Erstellung von benutzerdefinierten Serialisierungsprogrammen und Authentifizierern) können nur durchgeführt werden, nachdem benutzerdefinierte Anmeldeinformationen erstellt wurden. Weitere Themen, die auf diesem Thema aufbauen:
- Gewusst wie: Erstellen eines benutzerdefinierten Sicherheitstokenanbieters
- Gewusst wie: Erstellen eines benutzerdefinierten Sicherheitstokenauthentifizierers
- Gewusst wie: Erstellen eines benutzerdefinierten Tokens.
Prozeduren
Implementieren von benutzerdefinierten Clientanmeldeinformationen
Definieren Sie eine neue Klasse, die von der ClientCredentials-Klasse abgeleitet ist.
Optional. Fügen Sie neue Eigenschaften hinzu, um Methoden oder Eigenschaften für neue Anmeldeinformationstypen bereitzustellen. Wenn Sie keine neuen Anmeldeinformationstypen hinzufügen, können Sie diesen Schritt überspringen. Im unten aufgeführten Beispiel wird eine
CreditCardNumber-Eigenschaft hinzugefügt.Überschreiben der CreateSecurityTokenManager-Methode. Diese Methode wird automatisch von der WCF-Sicherheitsinfrastruktur aufgerufen, wenn die benutzerdefinierten Clientanmeldeinformationen verwendet werden. Diese Methode ist für die Erstellung und die Rückgabe einer Implementierungsinstanz der SecurityTokenManager-Klasse verantwortlich. Die folgende Prozedur beschreibt, wie so eine Implementierung erstellt werden kann.
Überschreiben der CloneCore-Methode.
Implementieren eines benutzerdefinierten Clientsicherheitstoken-Managers
Definieren Sie eine neue Klasse, die von ClientCredentialsSecurityTokenManager abgeleitet ist.
Optional. Überschreiben Sie die CreateSecurityTokenProvider-Methode, wenn eine benutzerdefinierte SecurityTokenProvider-Implementierung erstellt werden muss. Weitere Informationen zu benutzerdefinierten Sicherheitstokenanbietern finden Sie unter Gewusst wie: Erstellen eines benutzerdefinierten Sicherheitstokenanbieters.
Optional. Überschreiben Sie die CreateSecurityTokenAuthenticator-Methode, wenn eine benutzerdefinierte SecurityTokenAuthenticator-Implementierung erstellt werden muss. Weitere Informationen zu benutzerdefinierten Sicherheitstokenauthentifizierern finden Sie unter Gewusst wie: Erstellen eines benutzerdefinierten Sicherheitstokenauthentifizierers.
Optional. Überschreiben Sie die CreateSecurityTokenSerializer-Methode, wenn ein benutzerdefiniertes SecurityTokenSerializer erstellt werden muss. Weitere Informationen über benutzerdefinierte Sicherheitstoken und Sicherheitstoken-Serialisierungsprogramme finden Sie unter Gewusst wie: Erstellen eines benutzerdefinierten Tokens.
Verwendung benutzerdefinierter Clientanmeldeinformationen aus Anwendungscode
Erstellen Sie entweder eine Instanz des generierten Clients, die die Dienstschnittstelle darstellt, oder erstellen Sie eine Instanz der ChannelFactory, die auf den Dienst verweist, mit dem Sie kommunizieren möchten.
Entfernen Sie das vom System bereitgestellte Clientanmeldeinformationsverhalten aus der Behaviors-Sammlung, auf die von der Endpoint-Eigenschaft aus zugegriffen werden kann.
Erstellen Sie eine neue Instanz einer benutzerdefinierten Clientanmeldeinformationsklasse, und fügen Sie diese zur Behaviors-Sammlung hinzu, auf die über die Endpoint-Eigenschaft zugegriffen werden kann.
Die zuvor genannte Prozedur zeigt, wie Clientanmeldeinformationen aus dem Anwendungscode genutzt werden können. WCF-Anmeldeinformationen können darüber hinaus mithilfe der Anwendungskonfigurationsdatei konfiguriert werden. Die Nutzung der Anwendungskonfiguration ist in vielen Fällen einer harten Codierung vorzuziehen, da hier eine Änderung der Anwendungsparameter ermöglicht wird, ohne dass ein Ändern der Quelle oder eine Neukompilierung und Neubereitstellung erforderlich sind.
Die nächste Prozedur beschreibt, wie eine Unterstützung für die Konfiguration von benutzerdefinierten Anmeldeinformationen erstellt wird.
Erstellen eines Konfigurationshandlers für benutzerdefinierte Clientanmeldeinformationen
Definieren Sie eine neue Klasse, die von ClientCredentialsElement abgeleitet ist.
Optional. Fügen Sie Eigenschaften für alle zusätzlichen Konfigurationsparameter hinzu, die Sie durch Anwendungskonfiguration verfügbar machen möchten. Im unten angegebenen Beispiel wird eine Eigenschaft mit dem Namen
CreditCardNumberhinzugefügt.Überschreiben Sie die BehaviorType-Eigenschaft, um den Typ der benutzerdefinierten Clienanmeldeinformationsklasse zurückzugeben, der mithilfe des Konfigurationselements erstellt wurde.
Überschreiben der CreateBehavior-Methode. Die Methode ist basierend auf den von der Konfigurationsdatei geladenen Einstellungen für die Erstellung und Rückgabe einer Instanz der benutzerdefinierten Anmeldeinformationsklasse verantwortlich. Rufen Sie die grundlegende ApplyConfiguration-Methode von dieser Methode auf, um die vom System bereitgestellten Anmeldeinformationseinstellungen abzurufen, die in Ihre benutzerdefinierte Clientanmeldeinformationsinstanz geladen sind.
Optional. Wenn Sie in Schritt 2 zusätzliche Eigenschaften hinzugefügt haben, müssen Sie die Properties-Eigenschaft zum Registrieren Ihrer zusätzlichen Konfigurationseinstellungen überschreiben, damit der Konfigurationsframework diese erkennt. Kombinieren Sie Ihre Eigenschaften mit den grundlegenden Klasseneigenschaften, um zu ermöglichen, dass die vom System bereitgestellten Einstellungen über das Konfigurationselement dieser benutzerdefinierten Clientanmeldeinformationen konfiguriert werden können.
Sobald Sie die Konfigurationshandlerklasse besitzen, kann diese in das WCF-Konfigurationsframework integriert werden. Dies ermöglicht die Verwendung benutzerdefinierter Clientanmeldeinformationen in den Clientendpunktverhaltenselementen, wie in der nächsten Prozedur gezeigt wird.
Registrieren und Verwenden eines benutzerdefinierten Clientanmeldeinformationen-Konfigurationshandlers in der Anwendungskonfiguration
Fügen Sie ein <extensions>-Element und ein <behaviorExtensions>-Element in die Konfigurationsdatei ein.
Fügen Sie ein <add>-Element zum <behaviorExtensions>-Element hinzu, und setzen Sie das name-Attribut auf einen angemessenen Wert fest.
Legen Sie das type-Attribut auf den vollqualifizierten Typnamen fest. Binden Sie ebenfalls den Assemblynamen und andere Assemblyattribute ein.
<system.serviceModel> <extensions> <behaviorExtensions> <add name="myClientCredentials" type="Microsoft.ServiceModel.Samples.MyClientCredentialsConfigHandler, CustomCredentials, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> </behaviorExtensions> </extensions> <system.serviceModel>Nach der Registrierung Ihres Konfigurationshandlers kann das benutzerdefinierte Anmeldeinformationselement innerhalb derselben Konfigurationsdatei anstelle des vom System bereitgestellten <clientCredentials>-Elements verwendet werden. Sie können sowohl die vom System bereitgestellten Eigenschaften als auch neue Eigenschaften verwenden, die Sie in Ihre Konfigurationshandlerimplementierung eingefügt haben. Im folgenden Beispiel wird der Wert einer benutzerdefinierten Eigenschaft mithilfe des creditCardNumber-Attributs eingerichtet.
<behaviors> <endpointBehaviors> <behavior name="myClientCredentialsBehavior"> <myClientCredentials creditCardNumber="123-123-123"/> </behavior> </endpointBehaviors> </behaviors>
Implementieren von benutzerdefinierten Dienstanmeldeinformationen
Definieren Sie eine neue Klasse, die von ServiceCredentials abgeleitet ist.
Optional. Fügen Sie neue Eigenschaften hinzu, um APIs für neue Werte für die Anmeldeinformationen bereitzustellen, die hinzugefügt werden. Wenn Sie keine neuen Anmeldeinformationswerte hinzufügen, können Sie diesen Schritt überspringen. Im folgenden Beispiel wird die
AdditionalCertificate-Eigenschaft hinzugefügt.Überschreiben der CreateSecurityTokenManager-Methode. Diese Methode wird automatisch von der WCF-Infrastruktur aufgerufen, wenn die benutzerdefinierten Clientanmeldeinformationen verwendet werden. Die Methode ist für die Erstellung und die Rückgabe einer Implementierungsinstanz der SecurityTokenManager-Klasse verantwortlich (wie in der nächsten Prozedur beschrieben).
Optional. Überschreiben Sie die CloneCore-Methode. Dies ist nur erforderlich, wenn neue Eigenschaften oder interne Felder zur benutzerdefinierten Clientanmeldeinformationsimplementierung hinzugefügt werden.
Implementieren eines benutzerdefinierten Dienstsicherheitstoken-Managers
Definieren Sie eine neue Klasse, die von der ServiceCredentialsSecurityTokenManager-Klasse abgeleitet ist.
Optional. Überschreiben Sie die CreateSecurityTokenProvider-Methode, wenn eine benutzerdefinierte SecurityTokenProvider-Implementierung erstellt werden muss. Weitere Informationen zu benutzerdefinierten Sicherheitstokenanbietern finden Sie unter Gewusst wie: Erstellen eines benutzerdefinierten Sicherheitstokenanbieters.
Optional. Überschreiben Sie die CreateSecurityTokenAuthenticator-Methode, wenn eine benutzerdefinierte SecurityTokenAuthenticator-Implementierung erstellt werden muss. Weitere Informationen zu benutzerdefinierten Sicherheitstokenauthentifizierern finden Sie unter Gewusst wie: Erstellen eines benutzerdefinierten Sicherheitstokenauthentifizierers.
Optional. Überschreiben Sie die CreateSecurityTokenSerializer-Methode, wenn ein benutzerdefiniertes SecurityTokenSerializer erstellt werden muss. Weitere Informationen über benutzerdefinierte Sicherheitstoken und Sicherheitstoken-Serialisierungsprogramme finden Sie unter Gewusst wie: Erstellen eines benutzerdefinierten Tokens.
Verwendung benutzerdefinierter Dienstanmeldeinformationen aus Anwendungscode
Erstellen Sie eine ServiceHost-Instanz.
Entfernen Sie das vom System bereitgestellte Dienstanmeldeinformationsverhalten aus der Behaviors-Sammlung.
Erstellen Sie eine neue Instanz der benutzerdefinierten Dienstanmeldeinformationsklasse, und fügen Sie diese der Behaviors-Sammlung hinzu.
Fügen Sie über die in den Prozeduren "Creating a configuration handler for custom client credentials" und "Registering and using a custom client credentials configuration handler in the application configuration" beschriebenen Schritte die Unterstützung für Konfiguration hinzu. Der einzige Unterschied liegt in der Verwendung der ServiceCredentialsElement-Klasse anstelle der ClientCredentialsElement-Klasse als Basisklasse für den Konfigurationshandler. Das benutzerdefinierte Dienstanmeldeinformationselement kann immer verwendet werden, wenn das vom System bereitgestellte <serviceCredentials>-Element genutzt wird.
Siehe auch
Aufgaben
Gewusst wie: Erstellen eines benutzerdefinierten Sicherheitstokenanbieters
Referenz
ClientCredentials
ServiceCredentials
SecurityCredentialsManager
SecurityTokenManager
ClientCredentialsElement
ServiceCredentialsElement
Konzepte
Gewusst wie: Erstellen eines benutzerdefinierten Sicherheitstokenauthentifizierers
Gewusst wie: Erstellen eines benutzerdefinierten Tokens