Vorgehensweise: Konfigurieren von Anmeldeinformationen auf einem Verbunddienst

In Windows Communication Foundation (WCF) besteht die Erstellung eines Verbunddienstes aus den folgenden Hauptverfahren:

  1. Konfigurieren einer WSFederationHttpBinding oder einer ähnlichen benutzerdefinierten Bindung. Weitere Informationen zum Erstellen einer entsprechenden Bindung finden Sie unter Gewusst wie: Erstellen einer WSFederationHttpBinding.

  2. Konfigurieren von IssuedTokenServiceCredential, die kontrollieren, wie dem Dienst präsentierte ausgestellte Token authentifiziert werden.

Dieses Thema enthält Details über den zweiten Schritt. Weitere Informationen zur Funktionsweise eines Verbunddiensts finden Sie unter Verbund.

So legen Sie die Eigenschaften von IssuedTokenServiceCredential in Code fest

  1. Verwenden Sie die IssuedTokenAuthentication-Eigenschaft der ServiceCredentials-Klasse, um einen Verweis an eine IssuedTokenServiceCredential-Instanz zurückzugeben. Der Zugriff auf die Eigenschaft erfolgt über die Credentials-Eigenschaft der ServiceHostBase-Klasse.

  2. Legen Sie die AllowUntrustedRsaIssuers-Eigenschaft auf true fest, wenn selbst ausgestellte Token wie Cardspace-Karten authentifiziert werden sollen. Der Standardwert lautet false.

  3. Füllen Sie die von der KnownCertificates-Eigenschaft zurückgegebene Sammlung mit Instanzen der X509Certificate2-Klasse auf. Jede Instanz stellt einen Aussteller dar, von dem der Dienst Token authentifiziert.

    Hinweis

    Im Gegensatz zur clientseitigen Sammlung, die von der ScopedCertificates-Eigenschaft zurückgegeben wird, handelt es sich bei der Sammlung bekannter Zertifikate nicht um eine schlüsselgebundene Sammlung. Der Dienst akzeptiert die Token, die die angegebenen Zertifikate unabhängig von der Adresse des Clients, der die Nachricht mit dem ausgestellten Token gesendet hat, ausstellen (mit gewissen Einschränkungen, die später in diesem Thema beschrieben werden).

  4. Legen Sie die CertificateValidationMode-Eigenschaft auf einen der X509CertificateValidationMode-Enumerationswerte fest. Dies kann nur in Code erfolgen. Der Standardwert lautet ChainTrust.

  5. Wenn die CertificateValidationMode-Eigenschaft auf Custom gesetzt ist, weisen Sie eine Instanz der benutzerdefinierten X509CertificateValidator-Klasse zur CustomCertificateValidator-Eigenschaft zu.

  6. Wenn CertificateValidationMode auf ChainTrust oder PeerOrChainTrust eingestellt ist, legen Sie die RevocationMode-Eigenschaft auf einen entsprechenden Wert aus der X509RevocationMode-Enumeration fest. Beachten Sie, dass der Sperrmodus nicht im PeerTrust-Validierungsmodus oder im Custom-Validierungsmodus verwendet wird.

  7. Weisen Sie, sofern erforderlich, eine Instanz einer benutzerdefinierten SamlSerializer-Klasse zur SamlSerializer-Eigenschaft zu. Ein benutzerdefiniertes SAML-Serialisierungsprogramm (Security Assertions Markup Language) wird benötigt, z. B. zum Analysieren von benutzerdefinierten SAML-Assertionen.

So legen Sie die Eigenschaften von IssuedTokenServiceCredential in der Konfiguration fest

  1. Erstellen Sie ein <issuedTokenAuthentication>-Element als untergeordnetes Element des <serviceCredentials>-Elements.

  2. Legen Sie das allowUntrustedRsaIssuers-Attribut des <issuedTokenAuthentication>-Elements auf true fest, wenn die Authentifizierung ein selbst ausgestelltes Token ist, wie z. B. eine CardSpace-Karte.

  3. Erstellen Sie ein <knownCertificates>-Element als untergeordnetes Element des <issuedTokenAuthentication>-Elements.

  4. Erstellen Sie null oder mehr <add><knownCertificates>storeLocationstoreName-Attribut und dem -Attribut an, wie das Zertifikat zu finden ist.

  5. Setzen Sie ggf. das Attribut samlSerializer des <issuedTokenAuthentication>-Elements auf den Typnamen der benutzerdefinierten SamlSerializer-Klasse.

Beispiel

Im folgenden Beispiel werden die Eigenschaften von IssuedTokenServiceCredential in Code festgelegt.

// This method configures the IssuedTokenAuthentication property of a ServiceHost.
public static void ConfigureIssuedTokenServiceCredentials(
    ServiceHost sh, bool allowCardspaceTokens, IList<X509Certificate2> knownissuers,
    X509CertificateValidationMode certMode, X509RevocationMode revocationMode, SamlSerializer ser )
{
  // Allow CardSpace tokens.
  sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = allowCardspaceTokens;

  // Set up known issuer certificates.
  foreach(X509Certificate2 cert in knownissuers)
    sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add ( cert );

  // Set issuer certificate validation and revocation checking modes.
  sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode =
      X509CertificateValidationMode.PeerOrChainTrust;
  sh.Credentials.IssuedTokenAuthentication.RevocationMode = X509RevocationMode.Online;
  sh.Credentials.IssuedTokenAuthentication.TrustedStoreLocation = StoreLocation.LocalMachine;

  // Set the SamlSerializer, if one is specified.
  if ( ser != null )
    sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser;
}
' This method configures the IssuedTokenAuthentication property of a ServiceHost.
Public Shared Sub ConfigureIssuedTokenServiceCredentials( _
    ByVal sh As ServiceHost, _
    ByVal allowCardspaceTokens As Boolean, _
    ByVal knownissuers As IList(Of X509Certificate2), _
    ByVal certMode As X509CertificateValidationMode, _
    ByVal revocationMode As X509RevocationMode, _
    ByVal ser As SamlSerializer _
    )
    ' Allow CardSpace tokens.
    sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = _
    allowCardspaceTokens

    ' Set up known issuer certificates.
    Dim cert As X509Certificate2
    For Each cert In knownissuers
        sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add(cert)
    Next cert
    ' Set issuer certificate validation and revocation checking modes.
    sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode = _
        X509CertificateValidationMode.PeerOrChainTrust
    sh.Credentials.IssuedTokenAuthentication.RevocationMode = _
    X509RevocationMode.Online

    ' Set the SamlSerializer, if one is specified.
    If Not (ser Is Nothing) Then
        sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser
    End If
End Sub

Damit ein Verbunddienst einen Client authentifizieren kann, muss Folgendes für das ausgestellte Token zutreffen:

  • Wenn die digitale Signatur des ausgestellten Tokens einen RSA-Sicherheitsschlüsselbezeichner verwendet, muss die AllowUntrustedRsaIssuers-Eigenschaft true lauten.

  • Wenn die Signatur des ausgestellten Tokens eine Seriennummer eines X.509-Ausstellers, einen Subjektschlüsselbezeichner des X.509-Zertifikats oder einen Fingerabdruck-Sicherheitsbezeichner des X.509-Zertifikats verwendet, muss das ausgestellte Token von einem Zertifikat in der Sammlung signiert sein, die von der KnownCertificates-Eigenschaft der IssuedTokenServiceCredential-Klasse zurückgegeben wurde.

  • Wenn das ausgestellte Token mit einem X.509-Zertifikat signiert ist, muss das Zertifikat anhand der semantischen Informationen validiert werden, die vom Wert der CertificateValidationMode-Eigenschaft angegeben werden, unabhängig davon, ob das Zertifikat als X509RawDataKeyIdentifierClause an die vertrauende Seite gesendet wurde oder von der KnownCertificates-Eigenschaft stammt. Weitere Informationen über die Validierung von X.509-Zertifikaten finden Sie unter Arbeiten mit Zertifikaten.

Durch Festlegen von CertificateValidationMode auf PeerTrust würde beispielsweise jedes ausgestellte Token, dessen Signaturzertifikat im TrustedPeople-Zertifikatspeicher abgelegt ist, authentifiziert werden. Legen Sie in diesem Fall die TrustedStoreLocation-Eigenschaft entweder auf CurrentUser oder auf LocalMachine fest. Sie können andere Modi auswählen, einschließlich Custom. Bei Auswahl von Custom müssen Sie eine Instanz der X509CertificateValidator-Klasse zur CustomCertificateValidator-Eigenschaft zuweisen. Das benutzerdefinierte Validierungssteuerelement kann Zertifikate mit allen beliebigen Kriterien überprüfen. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Diensts, der ein benutzerdefiniertes Zertifikat-Validierungssteuerelement verwendet.

Siehe auch