Sdílet prostřednictvím


Postupy: Vytvoření WSFederationHttpBinding

Ve Windows Communication Foundation (WCF) WSFederationHttpBinding třída (<wsFederationHttpBinding> v konfiguraci) poskytuje mechanismus pro zveřejnění federované služby. To znamená, že služba, která vyžaduje, aby se klienti ověřili pomocí tokenu zabezpečení vydaného službou tokenů zabezpečení. Toto téma ukazuje, jak nastavit WSFederationHttpBinding kód i konfiguraci. Po vytvoření vazby můžete nastavit koncový bod pro použití této vazby.

Základní kroky jsou popsány takto:

  1. Vyberte režim zabezpečení. Podporuje WSFederationHttpBinding Message, který poskytuje komplexní zabezpečení na úrovni zpráv, a to i napříč více segmenty směrování, a TransportWithMessageCredential, což poskytuje lepší výkon v případech, kdy klient a služba mohou vytvořit přímé připojení přes PROTOKOL HTTPS.

    Poznámka:

    Podporuje WSFederationHttpBinding se také None jako režim zabezpečení. Tento režim není zabezpečený a je k dispozici pouze pro účely ladění. Pokud je koncový bod služby nasazen s WSFederationHttpBinding režimem zabezpečení nastaveným na None, výsledná klientská vazba (vygenerovaná nástrojem ServiceModel Metadata Utility Tool (Svcutil.exe)) je WSHttpBinding s režimem Nonezabezpečení .

    Na rozdíl od jiných systémových vazeb není nutné při použití příkazu WSFederationHttpBindingvybrat typ přihlašovacích údajů klienta . Důvodem je to, že typ přihlašovacích údajů klienta je vždy vystavený token. WCF získá token od zadaného vystavitele a tento token předá službě k ověření klienta.

  2. Na federovaných klientech nastavte IssuerAddress vlastnost na adresu URL služby tokenů zabezpečení. IssuerBinding Nastavte na vazbu, která se má použít ke komunikaci se službou tokenů zabezpečení.

  3. Nepovinné. IssuedTokenType Nastavte vlastnost na identifikátor URI (Uniform Resource Identifier) typu tokenu. U federovaných služeb zadejte typ tokenu, který služba očekává. U federovaných klientů zadejte typ tokenu, který klient požaduje ze služby tokenů zabezpečení.

    Pokud není zadán žádný typ tokenu, klienti ve výchozím nastavení generují tokeny zabezpečení žádosti WS-Trust (RST) bez identifikátoru URI typu tokenu a služby očekávají ověření klienta pomocí tokenu SAML (Security Assertions Markup Language) 1.1.

    Identifikátor URI tokenu SAML 1.1 je http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1.

  4. Nepovinné. U federovaných služeb nastavte IssuerMetadataAddress vlastnost na adresu URL metadat služby tokenů zabezpečení. Koncový bod metadat umožňuje klientům služby vybrat odpovídající dvojici vazeb nebo koncových bodů, pokud je služba nakonfigurovaná tak, aby publikovala metadata. Další informace o metadatech publikování najdete v tématu Metadata publikování.

Můžete také nastavit další vlastnosti, včetně typu klíče použitého jako ověřovací klíč v vydaném tokenu, sady algoritmů, která se má použít mezi klientem a službou, ať už chcete vyjednat nebo explicitně zadat přihlašovací údaje služby, jakékoli konkrétní deklarace identity, které služba očekává, že vystavený token bude obsahovat, a všechny další elementy XML, které musí být přidány do požadavku, klient odešle do služby tokenů zabezpečení.

Poznámka:

Vlastnost NegotiateServiceCredential je relevantní pouze v případech, kdy je nastavena SecurityMode na Messagehodnotu . Pokud SecurityMode je nastavena na TransportWithMessageCredential, pak NegotiateServiceCredential je vlastnost ignorována.

Konfigurace WSFederationHttpBinding v kódu

  1. Vytvořte instanci WSFederationHttpBinding.

  2. Mode Nastavte vlastnost na WSFederationHttpSecurityMode nebo Message podle potřeby. Pokud je sada algoritmů jiná než Basic256 je požadována, nastavte AlgorithmSuite vlastnost na hodnotu převzatou z SecurityAlgorithmSuite.

  3. Podle potřeby nastavte NegotiateServiceCredential vlastnost.

  4. IssuedKeyType Nastavte vlastnost na SecurityKeyTypeSymmetricKey hodnotu nebo .AsymmetricKey podle potřeby.

  5. IssuedTokenType Nastavte vlastnost na odpovídající hodnotu. Pokud není nastavena žádná hodnota, wcf výchozí hodnota http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1, která označuje SAML 1.1 tokeny.

  6. Vyžaduje se v klientovi, pokud není zadán žádný místní vystavitel; volitelné ve službě. Vytvořte objekt EndpointAddress obsahující informace o adrese a identitě služby tokenu zabezpečení a přiřaďte EndpointAddress instanci vlastnosti IssuerAddress .

  7. Vyžaduje se v klientovi, pokud není zadán žádný místní vystavitel; nepoužívá se ve službě. Vytvořte Binding pro SecurityTokenService vlastnost instanci a přiřaďte ji.IssuerBinding Binding

  8. Nepoužívá se na klientovi; volitelné ve službě. Vytvořte EndpointAddress instanci pro metadata služby tokenů zabezpečení a přiřaďte ji k IssuerMetadataAddress vlastnosti.

  9. Volitelné v klientovi i službě. Vytvořte a přidejte jednu nebo více ClaimTypeRequirement instancí do kolekce vrácené ClaimTypeRequirements vlastností.

  10. Volitelné v klientovi i službě. Vytvořte a přidejte jednu nebo více XmlElement instancí do kolekce vrácené TokenRequestParameters vlastností.

Vytvoření federovaného koncového bodu v konfiguraci

  1. Vytvořte <wsFederationHttpBinding> jako podřízený prvek< bindings> v konfiguračním souboru aplikace.

  2. Vytvořte element vazby <>jako podřízený wsFederationHttpBinding<> a nastavte name atribut na odpovídající hodnotu.

  3. Vytvoření <security> elementu jako podřízeného prvku vazby><

  4. mode Nastavte atribut prvku <security> na hodnotu Message nebo TransportWithMessageCredential, podle potřeby.

  5. Vytvoření elementu <message> jako podřízeného <security> prvku

  6. Nepovinné. algorithmSuite Nastavte atribut prvku <message> s odpovídající hodnotou. Výchozí hodnota je Basic256.

  7. Nepovinné. Pokud je vyžadován asymetrický ověřovací klíč, nastavte issuedKeyType atribut <message> prvku na AsymmetricKey. Výchozí hodnota je SymmetricKey.

  8. Nepovinné. issuedTokenType Nastavte atribut prvku<message>.

  9. Vyžaduje se v klientovi, pokud není zadán žádný místní vystavitel; volitelné ve službě. Vytvoření elementu <issuer> jako podřízeného <message> prvku

  10. address Nastavte atribut na <issuer> element a zadejte adresu, na které služba tokenu zabezpečení přijímá žádosti o tokeny.

  11. Nepovinné. Přidání podřízeného <identity> elementu a určení identity služby tokenů zabezpečení

  12. Další informace najdete v tématu Identita služby a ověřování.

  13. Vyžaduje se v klientovi, pokud není zadán žádný místní vystavitel; nepoužívá se ve službě. V části vazby vytvořte <prvek vazby> , který lze použít ke komunikaci se službou tokenů zabezpečení. Další informace o vytvoření vazby naleznete v tématu Postupy: Určení vazby služby v konfiguraci.

  14. Zadejte vazbu vytvořenou v předchozím kroku nastavením binding atributů elementu<issuer>.bindingConfiguration

  15. Nepoužívá se na klientovi; volitelné ve službě. Vytvoření elementu <issuerMetadata> jako podřízeného <message> prvku Potom v address atributu prvku <issuerMetadata> zadejte adresu, na které má služba tokenu zabezpečení publikovat metadata. Volitelně můžete přidat <identity> podřízený prvek a zadat identitu služby tokenu zabezpečení.

  16. Volitelné v klientovi i službě. Přidání elementu <claimTypeRequirements> jako podřízeného <message> prvku Zadejte povinné a volitelné deklarace identity, na které služba spoléhá, přidáním <prvků> do elementu <claimTypeRequirements> a určením typu deklarace identity s atributem claimType . Určete, zda je daná deklarace identity povinná, nebo nepovinná nastavením atributu isOptional .

Příklad

Následující ukázka kódu ukazuje kód pro nastavení imperativního WSFederationHttpBinding nastavení.

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

Viz také