Freigeben über


Konfiguration der Tokenhandler

In diesem Thema wird erläutert, wie Sicherheitstokenhandler für die Anwendung der vertrauenden Seite oder den Sicherheitstokendienst (STS) konfiguriert werden.

Sie können die Sicherheitstokenhandler über die Konfigurationsdatei der Anwendung konfigurieren oder programmgesteuert ein Konfigurationsobjekt erstellen und dies als Eigenschaft von Sicherheitstokenhandlern festlegen.

Es wird empfohlen, die Configuration-Eigenschaft nicht für einen einzelnen Tokenhandler festzulegen. Stattdessen sollten Sie die Configuration-Eigenschaft in der Tokenhandlersammlung festlegen. Wenn Sie die Configuration-Eigenschaft für einen einzelnen Tokenhandler festlegen müssen, sollte dies nach dem Hinzufügen des Handlers zur Sammlung erfolgen. Der Grund hierfür ist, dass beim Hinzufügen eines Tokenhandlers zu einer Sammlung die Configuration des Handlers auf die Konfiguration der Sammlung und die ContainingCollection-Eigenschaft des Handlers auf die Sammlungsinstanz festgelegt wird. Außerdem werden diese Eigenschaften beim Entfernen eines Tokenhandlers aus einer Sammlung auf NULL gesetzt.

Darüber hinaus sollten Sie einen Tokenhandler nicht mehreren Sammlungen hinzufügen. Dies führt aufgrund des zuvor beschriebenen Verhaltens zu einem Fehler. Wenn mehrere Tokenhandler mit unterschiedlichen Konfigurationen in derselben Sammlung erforderlich sind, sollten Sie zuerst diese Handler der Sammlung hinzufügen, anschließend neue SecurityTokenHandlerConfiguration-Instanzen erstellen und diese jedem Handler einzeln zuweisen, um sicherzustellen, dass der Status nicht versehentlich gemeinsam verwendet wird.

Sie können die Configuration-Eigenschaft auch für einen einzelnen Tokenhandler festlegen, wenn Sie diesen ohne Sammlung verwenden.

Die Konfiguration des Sicherheitstokenhandlers kann auch in der Konfigurationsdatei der Anwendung festgelegt werden. Dies ist eine Beispielkonfiguration:

<microsoft.identityModel> <!-- Dies entspricht der ServiceConfiguration-Klasse. --> <service> <!-- Dies entspricht der Standardtoken-Handlersammlung ServiceConfiguration.SecurityTokenHandlers --> <securityTokenHandlers> <!-- Hierbei handelt es sich um die Konfiguration auf Sammlungsebene, nicht um die Konfiguration auf Handlerebene. Beachten Sie, dass Sie einen einzelnen Tokenhandler wie zuvor beschrieben programmgesteuert konfigurieren können, auch wenn dies nicht empfohlen wird. In einer Konfigurationsdatei ist dies dagegen nicht möglich. --> <securityTokenHandlerConfiguration> <!-- IssuerNameRegistry enthält die Liste vertrauenswürdiger Aussteller.--> <issuerNameRegistry /> <!-- ServiceTokenResolver dient zum Auflösen der Verschlüsselungszertifikate beim Entschlüsseln des Token.--> <serviceTokenResolver /> <!-- IssuerTokenResolver dient zum Auflösen der Signaturzertifikate beim Überprüfen der Signatur des von einem STS ausgestellten Tokens. --> <issuerTokenResolver /> <!-- AudienceUris enthält die URIs, von denen die Anwendung erwartet, dass die Sicherheitstoken dorthin zugestellt werden. --> <audienceUris mode="Always" /> </securityTokenHandlerConfiguration> </securityTokenHandlers> <!-- Dies entspricht dem Nachschlagen der ActAs-Tokenhandlersammlung im Tokenhandlersammlungs-Manager mit einem der folgenden Elemente: ServiceConfiguration.SecurityTokenHandlerCollectionManager["ActAs"] ServiceConfiguration.SecurityTokenHandlerCollectionManager[ SecurityTokenHandlerCollectionManager.Usage.ActAs]; --> <securityTokenHandlers name="ActAs"> </securityTokenHandlers> <issuerNameRegistry ... /> <serviceTokenResolver ... /> </service> <!-- Dies entspricht dem Erstellen einer neuen ServiceConfiguration wie folgt: new ServiceConfiguration("CustomService"); --> <service name="CustomService"> </service> </microsoft.identityModel>

Konfigurieren der Einstellungen bezüglich Sperrung und Überprüfung für X509CertificateTokenHandler

Im folgenden Code wird gezeigt, wie Einstellungen bezüglich Sperrung und Überprüfung für X509CertificateTokenHandler programmgesteuert konfiguriert werden.

using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Configuration; using System.IdentityModel.Selectors; using System.Security.Cryptography.X509Certificates; using System.ServiceModel.Security;

class Sample { public static void ConfigureCustomValidator() { // 1a. Konfigurieren eines Dienstkonfigurationsobjekts (benutzerdefiniert) ServiceConfiguration serviceConfig = new ServiceConfiguration(); serviceConfig.CertificateValidationMode = X509CertificateValidationMode.Custom; serviceConfig.CertificateValidator = new CustomX509Validator();

        // 1b. Konfigurieren eines einzelnen X509SecurityTokenHandler (benutzerdefiniert) X509CertificateValidator customValidator = new CustomX509Validator(); X509SecurityTokenHandler x509Handler = new X509SecurityTokenHandler(customValidator); }

    public static void DisableRevocationMode() { // 2a. Konfigurieren eines Dienstkonfigurationsobjekts (Sperrmodus ändern) ServiceConfiguration serviceConfig = new ServiceConfiguration(); serviceConfig.RevocationMode = X509RevocationMode.NoCheck; serviceConfig.TrustedStoreLocation = StoreLocation.LocalMachine; serviceConfig.CertificateValidationMode = X509CertificateValidationMode.ChainTrust;

        // 2b. Konfigurieren eines einzelnen X509SecurityTokenHandler (Sperrmodus ändern) X509SecurityTokenHandler x509Handler = new X509SecurityTokenHandler(); X509ChainPolicy chainPolicy = new X509ChainPolicy(); chainPolicy.RevocationMode = X509RevocationMode.NoCheck; x509Handler.CertificateValidator = X509CertificateValidator.CreateChainTrustValidator(true, chainPolicy); }

    class CustomX509Validator : X509CertificateValidator { public override void Validate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) { // Hier Überprüfungslogik einfügen. } } }

Konfigurieren der Zuordnung für die Windows-Anmeldeinformationen

Im folgenden Codeausschnitt wird die Konfiguration der Zuordnung für die Windows-Anmeldeinformationen verdeutlicht:

X509SecurityTokenHandler x509Handler = new X509SecurityTokenHandler(); x509Handler.MapToWindows = true;

        UserNameSecurityTokenHandler usernameHandler = new WindowsUserNameSecurityTokenHandler();

        Saml11SecurityTokenHandler saml11Handler = new Saml11SecurityTokenHandler(); saml11Handler.SamlSecurityTokenRequirement.MapToWindows = true;

        Saml2SecurityTokenHandler saml2Handler = new Saml2SecurityTokenHandler(); saml2Handler.SamlSecurityTokenRequirement.MapToWindows = true;