Nasıl yapılır: WSFederationHttpBinding Oluşturma

Windows Communication Foundation'da (WCF), WSFederationHttpBinding sınıfı (<yapılandırmada wsFederationHttpBinding> ), federasyon hizmetini kullanıma sunmak için bir mekanizma sağlar. Diğer bir ifadeyle, istemcilerin bir güvenlik belirteci hizmeti tarafından verilen bir güvenlik belirtecini kullanarak kimlik doğrulamasını gerektiren bir hizmettir. Bu konu başlığında, hem kodda hem de yapılandırmada nasıl ayarlanacağı WSFederationHttpBinding gösterilmektedir. Bağlama oluşturulduktan sonra, bu bağlamayı kullanmak için bir uç nokta ayarlayabilirsiniz.

Temel adımlar aşağıdaki gibi özetlenmiştir:

  1. Bir güvenlik modu seçin. , WSFederationHttpBinding birden çok atlamada bile ileti düzeyinde uçtan uca güvenlik sağlayan ve istemcinin ve TransportWithMessageCredentialhizmetin HTTPS üzerinden doğrudan bağlantı oluşturabildiği durumlarda daha iyi performans sağlayan öğesini desteklerMessage.

    Not

    , WSFederationHttpBinding güvenlik modu olarak da destekler None . Bu mod güvenli değildir ve yalnızca hata ayıklama amacıyla sağlanır. Bir hizmet uç noktası, güvenlik modu olarak ayarlanmış bir WSFederationHttpBinding ile dağıtılırsa, sonuçta elde edilen istemci bağlaması (ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe) tarafından oluşturulur) bir güvenlik modu Noneile olurWSHttpBinding.None

    Sistem tarafından sağlanan diğer bağlamalardan farklı olarak, kullanırken WSFederationHttpBindingbir istemci kimlik bilgisi türü seçmek gerekli değildir. Bunun nedeni, istemci kimlik bilgisi türünün her zaman verilen bir belirteç olmasıdır. WCF, belirtilen bir verenden bir belirteç alır ve istemcinin kimliğini doğrulamak için bu belirteci hizmete sunar.

  2. Federasyon istemcilerinde özelliğini güvenlik belirteci hizmetinin URL'sine ayarlayın IssuerAddress . IssuerBinding öğesini, güvenlik belirteci hizmetiyle iletişim kurmak için kullanılacak bağlamaya ayarlayın.

  3. isteğe bağlı. IssuedTokenType özelliğini bir belirteç türünün Tekdüzen Kaynak Tanımlayıcısı (URI) olarak ayarlayın. Federasyon hizmetlerinde, hizmetin beklediği belirteç türünü belirtin. Federasyon istemcilerinde, güvenlik belirteci hizmetinden istemci isteklerinin belirteç türünü belirtin.

    Belirteç türü belirtilmezse, istemciler belirteç türü URI'si olmadan WS-Trust İsteği Güvenlik Belirteçleri (RST) oluşturur ve hizmetler varsayılan olarak Güvenlik Onayları Biçimlendirme Dili (SAML) 1.1 belirteci kullanarak istemci kimlik doğrulaması bekler.

    SAML 1.1 belirtecinin URI'si şeklindedir http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1.

  4. isteğe bağlı. Federasyon hizmetlerinde IssuerMetadataAddress özelliğini bir güvenlik belirteci hizmetinin meta veri URL'si olarak ayarlayın. Meta veri uç noktası, hizmet istemcilerinin meta verileri yayımlayacak şekilde yapılandırılmışsa uygun bir bağlama/uç nokta çifti seçmesini sağlar. Meta verileri yayımlama hakkında daha fazla bilgi için bkz . Yayımlama Meta Verileri.

Ayrıca, verilen belirteçte yazım denetleme anahtarı olarak kullanılan anahtarın türü, istemci ile hizmet arasında kullanılacak algoritma paketi, hizmet kimlik bilgilerini anlaşmak veya açıkça belirtmek, hizmetin verilen belirtecin içermesini beklediği belirli talepler ve istemcinin güvenlik belirteci hizmetine gönderdiği isteğe eklenmesi gereken ek XML öğeleri gibi diğer özellikleri de ayarlayabilirsiniz.

Not

NegotiateServiceCredential özelliği yalnızca olarak ayarlandığında MessagegeçerlidirSecurityMode. olarak ayarlanırsa SecurityMode TransportWithMessageCredentialNegotiateServiceCredential özelliği yoksayılır.

Kodda WSFederationHttpBinding yapılandırmak için

  1. WSFederationHttpBinding nesnesinin bir örneğini oluşturun.

  2. Mode özelliğini WSFederationHttpSecurityMode gerektiği gibi veya Message olarak ayarlayın. dışında Basic256 bir algoritma paketi gerekiyorsa, özelliğini değerinden AlgorithmSuite SecurityAlgorithmSuitealınan bir değere ayarlayın.

  3. NegotiateServiceCredential özelliğini uygun şekilde ayarlayın.

  4. IssuedKeyType özelliğini veya olarak SecurityKeyTypeSymmetricKey ayarlayın.AsymmetricKey öğesini seçin.

  5. IssuedTokenType özelliğini uygun değere ayarlayın. Hiçbir değer ayarlı değilse, WCF varsayılan olarak http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1olarak ayarlanır ve bu da SAML 1.1 belirteçlerini gösterir.

  6. Yerel veren belirtilmezse istemcide gereklidir; isteğe bağlı olarak seçin. Güvenlik belirteci hizmetinin adres ve kimlik bilgilerini içeren bir EndpointAddress oluşturun ve örneği özelliğine atayın EndpointAddress IssuerAddress .

  7. Yerel veren belirtilmezse istemcide gereklidir; hizmette kullanılmaz. için SecurityTokenService bir Binding oluşturun ve örneğini Binding özelliğine atayınIssuerBinding.

  8. İstemcide kullanılmaz; isteğe bağlı olarak seçin. Güvenlik belirteci hizmetinin meta verileri için bir EndpointAddress örnek oluşturun ve özelliğine atayın IssuerMetadataAddress .

  9. hem istemcide hem de hizmette isteğe bağlı. özelliği tarafından ClaimTypeRequirements döndürülen koleksiyona bir veya daha fazla ClaimTypeRequirement örnek oluşturun ve ekleyin.

  10. hem istemcide hem de hizmette isteğe bağlı. özelliği tarafından TokenRequestParameters döndürülen koleksiyona bir veya daha fazla XmlElement örnek oluşturun ve ekleyin.

Yapılandırmada federasyon uç noktası oluşturmak için

  1. Uygulama yapılandırma dosyasında bağlamalar öğesinin <alt öğesi olarak bir wsFederationHttpBinding>> oluşturun.<

  2. wsFederationHttpBinding öğesinin <alt öğesi olarak bir< bağlama> öğesi oluşturun ve özniteliğini name uygun bir değere ayarlayın.>

  3. Bağlama> öğesinin <alt öğesi olarak bir <security> öğe oluşturun.

  4. öğesindeki mode <security> özniteliğini gerektiği gibi veya TransportWithMessageCredentialdeğerine Message ayarlayın.

  5. <message> öğesinin <security> alt öğesi olarak oluşturun.

  6. isteğe bağlı. öğesinde algorithmSuite özniteliğini <message> uygun bir değerle ayarlayın. Varsayılan değer: Basic256.

  7. isteğe bağlı. Asimetrik bir yazım denetleme anahtarı gerekiyorsa öğesinin issuedKeyType <message> özniteliğini olarak AsymmetricKeyayarlayın. Varsayılan değer: SymmetricKey.

  8. isteğe bağlı. öğesinde issuedTokenType özniteliğini <message> ayarlayın.

  9. Yerel veren belirtilmezse istemcide gereklidir; isteğe bağlı olarak seçin. <issuer> öğesinin <message> alt öğesi olarak oluşturun.

  10. özniteliğini address <issuer> öğesine ayarlayın ve güvenlik belirteci hizmetinin belirteç isteklerini kabul ettiği adresi belirtin.

  11. isteğe bağlı. Bir <identity> alt öğe ekleyin ve güvenlik belirteci hizmetinin kimliğini belirtin

  12. Daha fazla bilgi için bkz . Hizmet Kimliği ve Kimlik Doğrulaması.

  13. Yerel veren belirtilmezse istemcide gereklidir; hizmette kullanılmaz. Bağlamalar bölümünde güvenlik belirteci hizmetiyle iletişim kurmak için kullanılabilecek bir <bağlama> öğesi oluşturun. Bağlama oluşturma hakkında daha fazla bilgi için bkz . Nasıl yapılır: Yapılandırmada Hizmet Bağlaması Belirtme.

  14. öğesinin ve bindingConfiguration özniteliklerini ayarlayarak binding önceki adımda oluşturulan bağlamayı <issuer> belirtin.

  15. İstemcide kullanılmaz; isteğe bağlı olarak seçin. <issuerMetadata> öğesinin <message> alt öğesi olarak oluşturun. Ardından öğesindeki <issuerMetadata> bir address öznitelikte, güvenlik belirteci hizmetinin meta verilerini yayımlamak için hangi adreste olduğunu belirtin. İsteğe bağlı olarak, bir <identity> alt öğe ekleyin ve güvenlik belirteci hizmetinin kimliğini belirtin.

  16. hem istemcide hem de hizmette isteğe bağlı. Öğesini <claimTypeRequirements> öğesinin <message> alt öğesi olarak ekleyin. öğesine öğe <claimTypeRequirements> ekleyerek >< ve talep türünü özniteliğiyle claimType belirterek hizmetin bağlı olduğu gerekli ve isteğe bağlı talepleri belirtin. Özniteliğini ayarlayarak isOptional belirli bir talebin gerekli mi yoksa isteğe bağlı mı olduğunu belirtin.

Örnek

Aşağıdaki kod örneği, kesinlik temelli ayarlama WSFederationHttpBinding kodunu gösterir.

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

Ayrıca bkz.