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:
Bir güvenlik modu seçin. , WSFederationHttpBinding birden çok atlamada bile ileti düzeyinde uçtan uca güvenlik sağlayan ve istemcinin ve
TransportWithMessageCredential
hizmetin 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 moduNone
ile olurWSHttpBinding.None
Sistem tarafından sağlanan diğer bağlamalardan farklı olarak, kullanırken
WSFederationHttpBinding
bir 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.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.
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
.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 Message
geçerlidirSecurityMode
. olarak ayarlanırsa SecurityMode
TransportWithMessageCredential
NegotiateServiceCredential
özelliği yoksayılır.
Kodda WSFederationHttpBinding yapılandırmak için
WSFederationHttpBinding nesnesinin bir örneğini oluşturun.
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.
NegotiateServiceCredential özelliğini uygun şekilde ayarlayın.
IssuedKeyType özelliğini veya olarak SecurityKeyType
SymmetricKey
ayarlayın.AsymmetricKey
öğesini seçin.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.1
olarak ayarlanır ve bu da SAML 1.1 belirteçlerini gösterir.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 .
Yerel veren belirtilmezse istemcide gereklidir; hizmette kullanılmaz. için
SecurityTokenService
bir Binding oluşturun ve örneğini Binding özelliğine atayınIssuerBinding.İ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
.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.
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
Uygulama yapılandırma dosyasında bağlamalar öğesinin <alt öğesi olarak bir wsFederationHttpBinding>> oluşturun.<
wsFederationHttpBinding öğesinin <alt öğesi olarak bir< bağlama> öğesi oluşturun ve özniteliğini
name
uygun bir değere ayarlayın.>Bağlama> öğesinin <alt öğesi olarak bir
<security>
öğe oluşturun.öğesindeki
mode
<security>
özniteliğini gerektiği gibi veyaTransportWithMessageCredential
değerineMessage
ayarlayın.<message>
öğesinin<security>
alt öğesi olarak oluşturun.isteğe bağlı. öğesinde
algorithmSuite
özniteliğini<message>
uygun bir değerle ayarlayın. Varsayılan değer:Basic256
.isteğe bağlı. Asimetrik bir yazım denetleme anahtarı gerekiyorsa öğesinin
issuedKeyType
<message>
özniteliğini olarakAsymmetricKey
ayarlayın. Varsayılan değer:SymmetricKey
.isteğe bağlı. öğesinde
issuedTokenType
özniteliğini<message>
ayarlayın.Yerel veren belirtilmezse istemcide gereklidir; isteğe bağlı olarak seçin.
<issuer>
öğesinin<message>
alt öğesi olarak oluşturun.özniteliğini
address
<issuer>
öğesine ayarlayın ve güvenlik belirteci hizmetinin belirteç isteklerini kabul ettiği adresi belirtin.isteğe bağlı. Bir
<identity>
alt öğe ekleyin ve güvenlik belirteci hizmetinin kimliğini belirtinDaha fazla bilgi için bkz . Hizmet Kimliği ve Kimlik Doğrulaması.
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.
öğesinin ve
bindingConfiguration
özniteliklerini ayarlayarakbinding
önceki adımda oluşturulan bağlamayı<issuer>
belirtin.İstemcide kullanılmaz; isteğe bağlı olarak seçin.
<issuerMetadata>
öğesinin<message>
alt öğesi olarak oluşturun. Ardından öğesindeki<issuerMetadata>
biraddress
ö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.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ğiyleclaimType
belirterek hizmetin bağlı olduğu gerekli ve isteğe bağlı talepleri belirtin. Özniteliğini ayarlayarakisOptional
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