Vorgehensweise: Erstellen einer WSFederationHttpBindingHow to: Create a WSFederationHttpBinding

In Windows Communication Foundation (WCF) die WSFederationHttpBinding Klasse (<WsFederationHttpBinding > im Configuration) bietet einen Mechanismus zum Bereitstellen eines verbundenen Diensts.In Windows Communication Foundation (WCF), the WSFederationHttpBinding class (<wsFederationHttpBinding> in configuration) provides a mechanism for exposing a federated service. Hierbei handelt es sich um einen Dienst, der eine Clientauthentifizierung mithilfe eines von einem Sicherheitstokendienst ausgestellten Sicherheitstokens erfordert.That is, a service that requires clients to authenticate using a security token issued by a security token service. In diesem Thema wird erläutert, wie WSFederationHttpBinding sowohl im Code als auch in der Konfiguration eingerichtet werden kann.This topic shows how to set up a WSFederationHttpBinding in both code and configuration. Nach dem Erstellen der Bindung können Sie einen Endpunkt einrichten, von dem diese Bindung verwendet wird.Once the binding is created, you can set up an endpoint to use that binding.

Die folgenden grundlegenden Schritte sind erforderlich:The basic steps are outlined as follows:

  1. Wählen Sie einen Sicherheitsmodus aus.Select a security mode. Von WSFederationHttpBinding wird Message unterstützt, wodurch sogar über mehrere Hops hinweg eine End-to-End-Sicherheit auf Nachrichtenebene erzielt wird. Zudem wird TransportWithMessageCredential unterstützt, um bei einer direkten HTTPS-Verbindung zwischen Client und Dienst eine höhere Leistung zu erzielen.The WSFederationHttpBinding supports Message, which provides end-to-end security at the message level, even across multiple hops, and TransportWithMessageCredential, which provides better performance in cases where the client and the service can make a direct connection over HTTPS.

    Hinweis

    Von WSFederationHttpBinding wird als Sicherheitsmodus auch None unterstützt.The WSFederationHttpBinding also supports None as a security mode. Dieser Modus ist nicht sicher und wird nur zu Debuggingzwecken bereitgestellt.This mode is not secure and is provided for debugging purposes only. Wenn ein Dienstendpunkt mit bereitgestellt wird eine WSFederationHttpBinding mit der Sicherheitsmodus auf None, die sich ergebende Clientbindung (generiert, indem Sie die ServiceModel Metadata Utility Tool (Svcutil.exe)) ist ein < xref:System.ServiceModel.WsHttpBinding> mit einem Sicherheitsmodus von None.If a service endpoint is deployed with a WSFederationHttpBinding with its security mode set to None, the resulting client binding (generated by the ServiceModel Metadata Utility Tool (Svcutil.exe)) is a < xref:System.ServiceModel.WsHttpBinding> with a security mode of None.

    Im Gegensatz zu anderen vom System bereitgestellten Bindungen muss bei Verwendung von WSFederationHttpBinding kein Typ für die Clientanmeldeinformationen ausgewählt werden, da für die Anmeldeinformationen immer ein ausgestelltes Token verwendet wird.Unlike other system-provided bindings, it is not necessary to select a client credential type when using the WSFederationHttpBinding. Der Grund: Für die Clientanmeldeinformationen wird immer ein ausgestelltes Token verwendet.This is because the client credential type is always an issued token. WCF erhält ein Token von einem angegebenen Aussteller und stellt dieses Token an den Dienst zum Authentifizieren des Clients.WCF acquires a token from a specified issuer and presents that token to the service to authenticate the client.

  2. Legen Sie auf Verbundclients die IssuerAddress-Eigenschaft auf die URL des Sicherheitstokendiensts fest.On federated clients, set the IssuerAddress property to the URL of the security token service. Legen Sie IssuerBinding auf die Bindung fest, die für die Kommunikation mit dem Sicherheitstokendienst verwendet werden soll.Set the IssuerBinding to the binding to use to communicate with the security token service.

  3. Dies ist optional.Optional. Legen Sie die IssuedTokenType-Eigenschaft auf den Uniform Resource Identifier (URI) eines Tokentyps fest.Set the IssuedTokenType property to the Uniform Resource Identifier (URI) of a token type. Geben Sie bei Verbunddiensten den Tokentyp an, der vom Dienst erwartet wird.On federated services, specify the token type that the service expects. Geben Sie bei Verbundclients den Tokentyp an, der durch den Client vom Sicherheitstokendienst angefordert wird.On federated clients, specify the token type the client requests from the security token service.

    Ist kein Tokentyp angegeben, werden von den Clients WS-Trust Request Security-Tokens (RSTs) ohne Tokentyp-URI generiert, und von den Diensten wird standardmäßig eine Clientauthentifizierung mithilfe eines SAML 1.1-Tokens (Security Assertions Markup Language) erwartet.If no token type is specified, clients generate WS-Trust Request Security Tokens (RSTs) without a token type URI, and services expect client authentication using a Security Assertions Markup Language (SAML) 1.1 token by default.

    Der URI für ein SAML 1.1-Token lautet "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1".The URI for a SAML 1.1 token is "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1".

  4. Dies ist optional.Optional. Legen Sie bei Verbunddiensten die IssuerMetadataAddress-Eigenschaft auf die Metadaten-URL eines Sicherheitstokendiensts fest.On federated services, set the IssuerMetadataAddress property to the metadata URL of a security token service. Der Metadatenendpunkt ermöglicht den Clients des Diensts das Auswählen eines geeigneten Bindungs-/Endpunktpaars, sofern der Dienst zum Veröffentlichen von Metadaten konfiguriert ist.The metadata endpoint enables clients of the service to select an appropriate binding/endpoint pair, if the service is configured to publish metadata. Weitere Informationen zum Veröffentlichen von Metadaten finden Sie unter Veröffentlichungsmetadaten.For more information about publishing metadata, see Publishing Metadata.

Auch andere Eigenschaften können festgelegt werden. Dazu zählen unter anderem der Schlüsseltyp, der im ausgestellten Token als Prüfschlüssel verwendet wird, die zwischen Client und Dienst verwendete Algorithmussammlung, die Einstellung, ob die Dienstanmeldeinformationen ausgehandelt oder explizit angegeben werden, bestimmte Ansprüche, die vom Dienst im ausgestellten Token erwartet werden, sowie sämtliche zusätzliche XML-Elemente, die der vom Client an den Sicherheitstokendienst gesendeten Anforderung hinzugefügt werden müssen.You can also set other properties, including the type of key used as a proof key in the issued token, the algorithm suite to use between the client and the service, whether to negotiate or explicitly specify the service credential, any specific claims the service expects the issued token to contain, and any additional XML elements that must be added to the request the client sends to the security token service.

Hinweis

Die NegotiateServiceCredential-Eigenschaft ist nur relevant, wenn SecurityMode auf Message festgelegt ist.The NegotiateServiceCredential property is only relevant when the SecurityMode is set to Message. Ist SecurityMode auf TransportWithMessageCredential festgelegt, wird die NegotiateServiceCredential-Eigenschaft ignoriert.If SecurityMode is set to TransportWithMessageCredential, then the NegotiateServiceCredential property is ignored.

So konfigurieren Sie WSFederationHttpBinding im CodeTo configure a WSFederationHttpBinding in code

  1. Erstellen Sie eine Instanz von WSFederationHttpBinding.Create an instance of the WSFederationHttpBinding.

  2. Legen Sie die Mode-Eigenschaft gemäß Ihren Anforderungen auf WSFederationHttpSecurityMode oder Message fest.Set the Mode property to WSFederationHttpSecurityMode or Message as required. Ein algorithmussuite außer Basic256 erforderlich ist, legen Sie die AlgorithmSuite -Eigenschaft auf ein werttoken von SecurityAlgorithmSuite.If an algorithm suite other than Basic256 is required, set the AlgorithmSuite property to a value taken from SecurityAlgorithmSuite.

  3. Legen Sie die NegotiateServiceCredential-Eigenschaft auf einen geeigneten Wert fest.Set the NegotiateServiceCredential property as appropriate.

  4. Legen Sie die IssuedKeyType Eigenschaft SecurityKeyType SymmetricKey oder.AsymmetricKeySet the IssuedKeyType property to SecurityKeyTypeSymmetricKey or .AsymmetricKey nach Bedarf.as required.

  5. Legen Sie die IssuedTokenType-Eigenschaft auf einen geeigneten Wert fest.Set the IssuedTokenType property to the appropriate value. Wenn kein Wert festgelegt ist, wird standardmäßig WCF auf "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1", womit der SAML 1.1-Token.If no value is set, WCF defaults to "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1", which indicates SAML 1.1 tokens.

  6. Ist erforderlich für den Client, wenn kein lokaler Aussteller angegeben ist. Optional für den Dienst.Required on the client if no local issuer is specified; optional on the service. Erstellen Sie eine EndpointAddress mit der Adresse und den Identitätsinformationen des Sicherheitstokendiensts, und weisen Sie die EndpointAddress-Instanz der IssuerAddress-Eigenschaft zu.Create an EndpointAddress that contains the address and identity information of the security token service and assign the EndpointAddress instance to the IssuerAddress property.

  7. Erforderlich für den Client, wenn kein lokaler Aussteller angegeben ist. Wird nicht für den Dienst verwendet.Required on the client if no local issuer is specified; not used on the service. Erstellen einer Binding für die SecurityTokenService , und weisen Sie die Binding -Instanz, auf die IssuerBinding Eigenschaft.Create a Binding for the SecurityTokenService and assign the Binding instance to the IssuerBinding property.

  8. Wird nicht für den Client verwendet. Optional für den Dienst.Not used on the client; optional on the service. Erstellen Sie eine EndpointAddress-Instanz für die Metadaten des Sicherheitstokendiensts, und weisen Sie sie der IssuerMetadataAddress-Eigenschaft zu.Create an EndpointAddress instance for the metadata of the security token service and assign it to the IssuerMetadataAddress property.

  9. Optional für Client und Dienst.Optional on both the client and the service. Erstellen Sie mindestens eine ClaimTypeRequirement-Instanz, und fügen Sie sie der von der ClaimTypeRequirements-Eigenschaft zurückgegebenen Auflistung hinzu.Create and add one or more ClaimTypeRequirement instances to the collection returned by the ClaimTypeRequirements property.

  10. Optional für Client und Dienst.Optional on both the client and the service. Erstellen Sie mindestens eine XmlElement-Instanz, und fügen Sie sie der von der TokenRequestParameters-Eigenschaft zurückgegebenen Auflistung hinzu.Create and add one or more XmlElement instances to the collection returned by the TokenRequestParameters property.

So erstellen Sie einen Verbundendpunkt in der KonfigurationTo create a federated endpoint in configuration

  1. Erstellen einer <WsFederationHttpBinding > als untergeordnetes Element von der <Bindungen > Element in der Anwendungskonfigurationsdatei.Create a <wsFederationHttpBinding> as a child of the <bindings> element in the application configuration file.

  2. Erstellen einer <Bindung > -Element als untergeordnetes Element des <WsFederationHttpBinding > und legen Sie die name -Attribut auf einen geeigneten Wert.Create a <binding> element as a child of <wsFederationHttpBinding> and set the name attribute to an appropriate value.

  3. Erstellen einer <security> Element als untergeordnetes Element von der <Bindung > Element.Create a <security> element as a child of the <binding> element.

  4. Legen Sie das mode-Attribut des <security>``TransportWithMessageCredential-Elements gemäß Ihren Anforderungen auf Message oder fest.Set the mode attribute on the <security> element to a value of Message or TransportWithMessageCredential, as required.

  5. Erstellen Sie ein <message>-Element als untergeordnetes Element des <security>-Elements.Create a <message> element as a child of the <security> element.

  6. Dies ist optional.Optional. Legen Sie das algorithmSuite-Attribut des <message>-Elements auf einen geeigneten Wert fest.Set the algorithmSuite attribute on the <message> element with an appropriate value. Die Standardeinstellung ist Basic256.The default is Basic256.

  7. Dies ist optional.Optional. Ist ein asymmetrischer Prüfschlüssel erforderlich, legen Sie das issuedKeyType-Attribut des <message>-Elements auf AsymmetricKey fest.If an asymmetric proof key is required, set the issuedKeyType attribute of the <message> element to AsymmetricKey. Die Standardeinstellung ist SymmetricKey.The default is SymmetricKey.

  8. Dies ist optional.Optional. Legen Sie das issuedTokenType-Attribut des <message>-Elements fest.Set the issuedTokenType attribute on the <message> element.

  9. Ist erforderlich für den Client, wenn kein lokaler Aussteller angegeben ist. Optional für den Dienst.Required on the client if no local issuer is specified; optional on the service. Erstellen Sie ein <issuer>-Element als untergeordnetes Element des <message>-Elements.Create an <issuer> element as a child of the <message> element.

  10. Legen Sie das address-Attribut auf das <issuer>-Element fest, und geben Sie die Adresse an, unter der vom Sicherheitstokendienst Tokenanforderungen angenommen werden.Set the address attribute to the <issuer> element and specify the address at which the security token service accepts token requests.

  11. Dies ist optional.Optional. Fügen Sie ein untergeordnetes <identity>-Element hinzu, und geben Sie die Identität des Sicherheitstokendiensts an.Add an <identity> child element and specify the identity of the security token service

  12. Weitere Informationen finden Sie unter -Dienstidentität und Authentifizierung.For more information, see Service Identity and Authentication.

  13. Erforderlich für den Client, wenn kein lokaler Aussteller angegeben ist. Wird nicht für den Dienst verwendet.Required on the client if no local issuer is specified; not used on the service. Erstellen einer <Bindung > Element im Bindungsabschnitt, die für die Kommunikation mit dem Sicherheitstokendienst verwendet werden kann.Create a <binding> element in the bindings section that can be used to communicate with the security token service. Weitere Informationen zum Erstellen einer Bindung finden Sie unter wie: Angeben einer Dienstbindung in einer Konfiguration.For more information about creating a binding, see How to: Specify a Service Binding in Configuration.

  14. Geben Sie die im vorangegangenen Schritt erstellte Bindung an, indem Sie das binding-Attribut und das bindingConfiguration-Attribut des <issuer>-Elements festlegen.Specify the binding created in the previous step by setting the binding and bindingConfiguration attributes of the <issuer> element.

  15. Wird nicht für den Client verwendet. Optional für den Dienst.Not used on the client; optional on the service. Erstellen Sie ein <issuerMetadata>-Element als untergeordnetes Element des <message>-Elements.Create an <issuerMetadata> element as a child of the <message> element. Geben Sie anschließend in einem address-Attribut des <issuerMetadata>-Elements die Adresse an, unter der die Metadaten des Sicherheitstokendiensts veröffentlicht werden.Then, in an address attribute on the <issuerMetadata> element, specify the address at which the security token service is to publish its metadata. Optional können Sie ein untergeordnetes <identity>-Element hinzufügen und die Identität des Sicherheitstokendiensts angeben.Optionally, add an <identity> child element and specify the identity of the security token service.

  16. Optional für Client und Dienst.Optional on both the client and the service. Fügen Sie ein <claimTypeRequirements>-Element als untergeordnetes Element des <message>-Elements hinzu.Add a <claimTypeRequirements> element as a child of the <message> element. Erforderliche und optionale Ansprüche anzugeben, die der Dienst basiert auf durch Hinzufügen von <hinzufügen > Elemente, die die <claimTypeRequirements> Element- und Angeben des Anspruchs Geben Sie mit der claimType Attribut.Specify required and optional claims that the service relies on by adding <add> elements to the <claimTypeRequirements> element and specifying the claim type with the claimType attribute. Geben Sie an, ob ein bestimmter Anspruch erforderlich oder optional ist, indem Sie das isOptional-Attribut festlegen.Specify whether a given claim is required or optional by setting the isOptional attribute.

BeispielExample

Das folgende Codebeispiel zeigt einen Code zum imperativen Einrichten einer WSFederationHttpBinding.The following code sample shows code for setting up a WSFederationHttpBinding imperatively.

// This method creates a WSFederationHttpBinding.
public static WSFederationHttpBinding 
       CreateWSFederationHttpBinding(bool isClient)
{
  // Create an instance of the WSFederationHttpBinding.
  WSFederationHttpBinding b = new WSFederationHttpBinding();

  // Set the security mode to Message.
  b.Security.Mode = WSFederationHttpSecurityMode.Message;
  
  // Set the Algorithm Suite to Basic256Rsa15.
  b.Security.Message.AlgorithmSuite = SecurityAlgorithmSuite.Basic256Rsa15;

  // Set NegotiateServiceCredential to true.
  b.Security.Message.NegotiateServiceCredential = true;

  // Set IssuedKeyType to Symmetric.
  b.Security.Message.IssuedKeyType = SecurityKeyType.SymmetricKey;

  // Set IssuedTokenType to SAML 1.1
  b.Security.Message.IssuedTokenType = 
         "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#samlv1.1";
  	  
  // Extract the STS certificate from the certificate store.
  X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
  store.Open(OpenFlags.ReadOnly);
  X509Certificate2Collection certs = store.Certificates.Find(
         X509FindType.FindByThumbprint, "0000000000000000000000000000000000000000", false);
  store.Close();
  
  // Create an EndpointIdentity from the STS certificate.
  EndpointIdentity identity = EndpointIdentity.CreateX509CertificateIdentity ( certs[0] );
  
  // Set the IssuerAddress using the address of the STS and the previously created 
     // EndpointIdentity.
  b.Security.Message.IssuerAddress = 
         new EndpointAddress(new Uri("http://localhost:8000/sts/x509"), identity);

  // Set the IssuerBinding to a WSHttpBinding loaded from configuration. 
     // The IssuerBinding is only used on federated clients.
     if (isClient)
     {
         b.Security.Message.IssuerBinding = new WSHttpBinding("Issuer");
     }

     // Set the IssuerMetadataAddress using the metadata address of the STS and the
     // previously created EndpointIdentity. The IssuerMetadataAddress is only used 
     // on federated services.
     else
     {
         b.Security.Message.IssuerMetadataAddress =
             new EndpointAddress(new Uri("http://localhost:8001/sts/mex"), identity);
     }
  // Create a ClaimTypeRequirement.
  ClaimTypeRequirement ctr = new ClaimTypeRequirement 
         ("http://example.org/claim/c1", false);

  // Add the ClaimTypeRequirement to ClaimTypeRequirements
  b.Security.Message.ClaimTypeRequirements.Add(ctr);
  
  // Return the created binding
  return b;
}
' This method creates a WSFederationHttpBinding.
Public Shared Function CreateWSFederationHttpBinding(ByVal isClient As Boolean) As WSFederationHttpBinding
    ' Create an instance of the WSFederationHttpBinding.
    Dim b As New WSFederationHttpBinding()
    With b.Security
        ' Set the security mode to Message.
        .Mode = WSFederationHttpSecurityMode.Message

        With .Message
            ' Set the Algorithm Suite to Basic256Rsa15.
            .AlgorithmSuite = SecurityAlgorithmSuite.Basic256Rsa15

            ' Set NegotiateServiceCredential to true.
            .NegotiateServiceCredential = True

            ' Set IssuedKeyType to Symmetric.
            .IssuedKeyType = SecurityKeyType.SymmetricKey

            ' Set IssuedTokenType to SAML 1.1
            .IssuedTokenType = "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#samlv1.1"
        End With
    End With

    ' Extract the STS certificate from the certificate store.
    Dim store As New X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser)
    store.Open(OpenFlags.ReadOnly)
    Dim certs = store.Certificates.Find(X509FindType.FindByThumbprint, _
                                        "0000000000000000000000000000000000000000", _
                                        False)
    store.Close()

    ' Create an EndpointIdentity from the STS certificate.
    Dim identity = EndpointIdentity.CreateX509CertificateIdentity(certs(0))

    ' Set the IssuerAddress using the address of the STS and the previously created 
    ' EndpointIdentity.
    With b.Security.Message
        .IssuerAddress = New EndpointAddress(New Uri("http://localhost:8000/sts/x509"), _
                                                                           identity)

        ' Set the IssuerBinding to a WSHttpBinding loaded from configuration. 
        ' The IssuerBinding is only used on federated clients.
        If isClient Then
            .IssuerBinding = New WSHttpBinding("Issuer")

            ' Set the IssuerMetadataAddress using the metadata address of the STS and the
            ' previously created EndpointIdentity. The IssuerMetadataAddress is only used 
            ' on federated services.
        Else
            .IssuerMetadataAddress = New EndpointAddress(New Uri("http://localhost:8001/sts/mex"), _
                                                                           identity)
        End If
        ' Create a ClaimTypeRequirement.
        Dim ctr As New ClaimTypeRequirement("http://example.org/claim/c1", _
                                            False)

        ' Add the ClaimTypeRequirement to ClaimTypeRequirements
        .ClaimTypeRequirements.Add(ctr)
    End With

    ' Return the created binding
    Return b
End Function

Siehe auchSee Also

VerbundFederation
VerbundbeispielFederation Sample
Vorgehensweise: Deaktivieren sicherer Sitzungen auf einer WSFederationHttpBindingHow to: Disable Secure Sessions on a WSFederationHttpBinding