Delen via


Procedure: Een WSFederationHttpBinding maken

In Windows Communication Foundation (WCF) biedt de WSFederationHttpBinding klasse (<wsFederationHttpBinding> in configuratie) een mechanisme voor het beschikbaar maken van een federatieve service. Dat wil gezegd: een service waarvoor clients moeten worden geverifieerd met behulp van een beveiligingstoken dat is uitgegeven door een beveiligingstokenservice. In dit onderwerp wordt beschreven hoe u een WSFederationHttpBinding in zowel code als configuratie instelt. Zodra de binding is gemaakt, kunt u een eindpunt instellen om die binding te gebruiken.

De basisstappen worden als volgt beschreven:

  1. Selecteer een beveiligingsmodus. De WSFederationHttpBinding ondersteuning Message, die end-to-end-beveiliging biedt op berichtniveau, zelfs in meerdere hops, en TransportWithMessageCredential, die betere prestaties biedt in gevallen waarin de client en de service een directe verbinding kunnen maken via HTTPS.

    Notitie

    De WSFederationHttpBinding ondersteuning wordt ook ondersteund None als een beveiligingsmodus. Deze modus is niet veilig en is alleen beschikbaar voor foutopsporing. Als een service-eindpunt wordt geïmplementeerd met de WSFederationHttpBinding beveiligingsmodus waarop de beveiligingsmodus is ingesteld None, is de resulterende clientbinding (gegenereerd door het hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe)) een WSHttpBinding met een beveiligingsmodus van None.

    In tegenstelling tot andere door het systeem geleverde bindingen is het niet nodig om een clientreferentietype te selecteren wanneer u de WSFederationHttpBinding. Dit komt doordat het clientreferentietype altijd een uitgegeven token is. WCF verkrijgt een token van een opgegeven verlener en presenteert dat token aan de service om de client te verifiëren.

  2. Stel op federatieve clients de IssuerAddress eigenschap in op de URL van de beveiligingstokenservice. Stel de IssuerBinding binding in die moet worden gebruikt om te communiceren met de beveiligingstokenservice.

  3. Optioneel. Stel de IssuedTokenType eigenschap in op de URI (Uniform Resource Identifier) van een tokentype. Geef bij federatieve services het tokentype op dat de service verwacht. Geef op federatieve clients het tokentype de clientaanvragen van de beveiligingstokenservice op.

    Als er geen tokentype is opgegeven, genereren clients WS-Trust Request Security Tokens (RST's) zonder een URI van het tokentype en worden clientverificatie verwacht met behulp van een SAML-token (Security Assertions Markup Language) 1.1-token standaard.

    De URI voor een SAML 1.1-token is http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1.

  4. Optioneel. Stel bij federatieve services de IssuerMetadataAddress eigenschap in op de metagegevens-URL van een beveiligingstokenservice. Met het eindpunt voor metagegevens kunnen clients van de service een geschikt bindings-/eindpuntpaar selecteren als de service is geconfigureerd voor het publiceren van metagegevens. Zie Publicatiemetagegevens voor meer informatie over het publiceren van metagegevens.

U kunt ook andere eigenschappen instellen, waaronder het type sleutel dat wordt gebruikt als een bewijssleutel in het uitgegeven token, het algoritmepakket dat moet worden gebruikt tussen de client en de service, ongeacht of u de servicereferenties wilt onderhandelen of expliciet opgeeft, eventuele specifieke claims die de service verwacht dat het uitgegeven token bevat, en eventuele extra XML-elementen die moeten worden toegevoegd aan de aanvraag die de client verzendt naar de beveiligingstokenservice.

Notitie

De NegotiateServiceCredential eigenschap is alleen relevant wanneer de SecurityMode eigenschap is ingesteld op Message. Als SecurityMode deze optie is ingesteld TransportWithMessageCredential, wordt de NegotiateServiceCredential eigenschap genegeerd.

Een WSFederationHttpBinding configureren in code

  1. Maak een instantie van de WSFederationHttpBinding.

  2. Stel de Mode eigenschap in op WSFederationHttpSecurityMode of Message zoals vereist. Als een ander algoritmepakket dan Basic256 vereist is, stelt u de AlgorithmSuite eigenschap in op een waarde die afkomstig is van SecurityAlgorithmSuite.

  3. Stel de NegotiateServiceCredential eigenschap zo nodig in.

  4. Stel de IssuedKeyType eigenschap in op SecurityKeyTypeSymmetricKey of .AsymmetricKey indien nodig.

  5. Stel de IssuedTokenType eigenschap in op de juiste waarde. Als er geen waarde is ingesteld, wordt wcf standaard http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1ingesteld op , wat SAML 1.1-tokens aangeeft.

  6. Vereist op de client als er geen lokale verlener is opgegeven; optioneel op de service. Maak een EndpointAddress bestand met de adres- en identiteitsgegevens van de beveiligingstokenservice en wijs het EndpointAddress exemplaar toe aan de IssuerAddress eigenschap.

  7. Vereist op de client als er geen lokale verlener is opgegeven; niet gebruikt voor de service. Maak een Binding voor de SecurityTokenService instantie en wijs het Binding exemplaar toe aan de IssuerBinding eigenschap.

  8. Niet gebruikt op de client; optioneel op de service. Maak een EndpointAddress exemplaar voor de metagegevens van de beveiligingstokenservice en wijs deze toe aan de IssuerMetadataAddress eigenschap.

  9. Optioneel op zowel de client als de service. Maak en voeg een of meer ClaimTypeRequirement exemplaren toe aan de verzameling die door de ClaimTypeRequirements eigenschap wordt geretourneerd.

  10. Optioneel op zowel de client als de service. Maak en voeg een of meer XmlElement exemplaren toe aan de verzameling die door de TokenRequestParameters eigenschap wordt geretourneerd.

Een federatief eindpunt maken in de configuratie

  1. Maak een wsFederationHttpBinding> als onderliggend element van het< bindingselement in het toepassingsconfiguratiebestand>.<

  2. Maak een <bindingselement> als onderliggend element van <wsFederationHttpBinding> en stel het name kenmerk in op een geschikte waarde.

  3. Maak een <security> element als onderliggend element van het <bindingselement> .

  4. Stel het mode kenmerk voor het <security> element in op een waarde van Message of TransportWithMessageCredential, indien nodig.

  5. Maak een <message> element als een onderliggend element van het <security> element.

  6. Optioneel. Stel het algorithmSuite kenmerk voor het <message> element in met een juiste waarde. De standaardwaarde is Basic256.

  7. Optioneel. Als een asymmetrische proof-sleutel is vereist, stelt u het issuedKeyType kenmerk van het <message> element in op AsymmetricKey. De standaardwaarde is SymmetricKey.

  8. Optioneel. Stel het issuedTokenType kenmerk in op het <message> element.

  9. Vereist op de client als er geen lokale verlener is opgegeven; optioneel op de service. Maak een <issuer> element als onderliggend element van het <message> element.

  10. Stel het kenmerk in op address het <issuer> element en geef het adres op waarop de beveiligingstokenservice tokenaanvragen accepteert.

  11. Optioneel. <identity> Een onderliggend element toevoegen en de identiteit van de beveiligingstokenservice opgeven

  12. Zie Service-identiteit en -verificatie voor meer informatie.

  13. Vereist op de client als er geen lokale verlener is opgegeven; niet gebruikt voor de service. Maak een <bindingselement> in de sectie Bindingen die kan worden gebruikt om te communiceren met de beveiligingstokenservice. Zie How to: Specify a Service Binding in Configuration (Een servicebinding opgeven in configuratie) voor meer informatie over het maken van een binding.

  14. Geef de binding op die in de vorige stap is gemaakt door de binding en bindingConfiguration kenmerken van het <issuer> element in te stellen.

  15. Niet gebruikt op de client; optioneel op de service. Maak een <issuerMetadata> element als onderliggend element van het <message> element. Geef vervolgens in een address kenmerk op het <issuerMetadata> element het adres op waarop de beveiligingstokenservice de metagegevens moet publiceren. Voeg eventueel een <identity> onderliggend element toe en geef de identiteit van de beveiligingstokenservice op.

  16. Optioneel op zowel de client als de service. Voeg een <claimTypeRequirements> element toe als onderliggend element van het <message> element. Geef vereiste en optionele claims op waarop de service afhankelijk is door elementen toe te voegen <>aan het <claimTypeRequirements> element en het claimtype op te geven met het claimType kenmerk. Geef op of een bepaalde claim vereist of optioneel is door het kenmerk in te isOptional stellen.

Opmerking

In het volgende codevoorbeeld ziet u code voor het instellen van een WSFederationHttpBinding imperatief.

// 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

Zie ook