Útmutató: WSFederationHttpBinding létrehozása
A Windows Communication Foundationben (WCF) az WSFederationHttpBinding osztály (<konfigurációban wsFederationHttpBinding> ) egy összevont szolgáltatás kiadásának mechanizmusát biztosítja. Ez egy olyan szolgáltatás, amely megköveteli az ügyfelek számára a hitelesítést egy biztonsági jogkivonat-szolgáltatás által kibocsátott biztonsági jogkivonat használatával. Ez a témakör bemutatja, hogyan állíthat be kódban és konfigurációban is.WSFederationHttpBinding A kötés létrehozása után beállíthat egy végpontot a kötés használatára.
Az alapvető lépések a következők:
Válasszon biztonsági módot. A WSFederationHttpBinding támogatás
Message
, amely teljes körű biztonságot nyújt az üzenet szintjén, akár több ugrással is, ésTransportWithMessageCredential
amely jobb teljesítményt nyújt olyan esetekben, amikor az ügyfél és a szolgáltatás közvetlen kapcsolatot tud létesíteni HTTPS-en keresztül.Feljegyzés
Biztonsági WSFederationHttpBinding módként is használható
None
. Ez a mód nem biztonságos, és csak hibakeresési célokra érhető el. Ha egy szolgáltatásvégpont biztonsági móddalNone
van üzembe helyezveWSFederationHttpBinding, az eredményül kapott ügyfélkötés (amelyet a ServiceModel Metaadat-segédprogram (Svcutil.exe) hoz létre) biztonsági WSHttpBinding móddal rendelkezikNone
.A többi rendszer által biztosított kötéstől eltérően nem szükséges ügyfél-hitelesítőadat-típust választani a
WSFederationHttpBinding
. Ennek az az oka, hogy az ügyfél hitelesítő adatainak típusa mindig kibocsátott jogkivonat. A WCF egy adott kiállítótól szerez be egy jogkivonatot, és bemutatja azt a szolgáltatásnak az ügyfél hitelesítéséhez.Összevont ügyfelek esetén állítsa a IssuerAddress tulajdonságot a biztonsági jogkivonat-szolgáltatás URL-címére. Állítsa be a IssuerBinding kötést a biztonsági jogkivonat-szolgáltatással való kommunikációhoz.
Opcionális. Állítsa a IssuedTokenType tulajdonságot egy jogkivonattípus egységes erőforrás-azonosítójára (URI). Összevont szolgáltatások esetén adja meg a szolgáltatás által várt jogkivonattípust. Összevont ügyfelek esetén adja meg a biztonsági jogkivonat szolgáltatásból érkező ügyfélkérések jogkivonattípusát.
Ha nincs megadva jogkivonattípus, az ügyfelek jogkivonattípus URI nélkül hoznak létre WS-Trust Request Biztonsági Jogkivonatokat (RST-eket), és a szolgáltatások alapértelmezés szerint 1.1-es biztonsági helyességi korrektúranyelv (SAML) használatával várják az ügyfélhitelesítést.
Az SAML 1.1-jogkivonat URI-ja az
http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1
.Opcionális. Összevont szolgáltatások esetén állítsa a IssuerMetadataAddress tulajdonságot egy biztonsági jogkivonat-szolgáltatás metaadat-URL-címére. A metaadat-végpont lehetővé teszi, hogy a szolgáltatás ügyfelei kiválasztjanak egy megfelelő kötés-/végpontpárt, ha a szolgáltatás metaadatok közzétételére van konfigurálva. A metaadatok közzétételéről további információt a Metaadatok közzététele című témakörben talál.
Egyéb tulajdonságokat is beállíthat, beleértve a kiállított jogkivonatban ellenőrző kulcsként használt kulcs típusát, az ügyfél és a szolgáltatás között használni kívánt algoritmuscsomagot, a szolgáltatás hitelesítő adatainak egyeztetését vagy explicit megadását, azokat a jogcímeket, amelyeket a szolgáltatás a kibocsátott jogkivonattól vár, valamint minden további XML-elemet, amelyet hozzá kell adni ahhoz a kéréshez, amelyet az ügyfél a biztonsági jogkivonat-szolgáltatásnak küld.
Feljegyzés
A NegotiateServiceCredential
tulajdonság csak akkor releváns, ha a SecurityMode
beállítás értéke Message
. Ha SecurityMode
be van állítva TransportWithMessageCredential
, akkor a NegotiateServiceCredential
tulajdonság figyelmen kívül lesz hagyva.
WSFederationHttpBinding konfigurálása kódban
Hozza létre a WSFederationHttpBinding egy példányát.
Állítsa be a Mode tulajdonságot WSFederationHttpSecurityMode igény szerint vagy Message értékre. Ha nem szükséges algoritmuscsomag Basic256 , állítsa a AlgorithmSuite tulajdonságot egy olyan értékre, amelyből származik SecurityAlgorithmSuite.
Állítsa be a NegotiateServiceCredential tulajdonságot a megfelelő módon.
Állítsa be a tulajdonságot a IssuedKeyType következőre SecurityKeyType
SymmetricKey
vagy .AsymmetricKey
szükség szerint.Állítsa be a IssuedTokenType tulajdonságot a megfelelő értékre. Ha nincs beállítva érték, a WCF alapértelmezés szerint az
http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1
1.1 SAML-jogkivonatokat jelzi.Szükség van az ügyfélre, ha nincs megadva helyi kiállító; nem kötelező a szolgáltatásban. Hozzon létre egy olyan példányt EndpointAddress , amely tartalmazza a biztonsági jogkivonat-szolgáltatás címét és identitásadatait, és rendelje hozzá a EndpointAddress példányt a IssuerAddress tulajdonsághoz.
Szükség van az ügyfélre, ha nincs megadva helyi kiállító; nem használható a szolgáltatásban. Hozzon létre egy példányt Binding ,
SecurityTokenService
és rendelje hozzá a Binding példányt a IssuerBinding tulajdonsághoz.Nincs használatban az ügyfélen; nem kötelező a szolgáltatásban. Hozzon létre egy példányt EndpointAddress a biztonsági jogkivonat-szolgáltatás metaadataihoz, és rendelje hozzá a
IssuerMetadataAddress
tulajdonsághoz.Az ügyfélen és a szolgáltatáson egyaránt választható. Hozzon létre és adjon hozzá egy vagy több ClaimTypeRequirement példányt a tulajdonság által visszaadott gyűjteményhez ClaimTypeRequirements .
Az ügyfélen és a szolgáltatáson egyaránt választható. Hozzon létre és adjon hozzá egy vagy több XmlElement példányt a tulajdonság által visszaadott gyűjteményhez TokenRequestParameters .
Összevont végpont létrehozása konfigurációban
Hozzon létre egy <wsFederationHttpBinding> fájlt az< alkalmazáskonfigurációs fájl kötési> elemének gyermekeként.
Hozzon létre egy <kötési> elemet a wsFederationHttpBinding> gyermekelemeként<, és állítsa be az
name
attribútumot egy megfelelő értékre.Hozzon létre egy
<security>
elemet a <kötési> elem gyermekeként.Állítsa az
mode
elem attribútumát<security>
igény szerint egy vagyTransportWithMessageCredential
több értékreMessage
.<message>
Elem létrehozása az elem gyermekeként<security>
.Opcionális. Állítsa be az
algorithmSuite
attribútumot az<message>
elemen egy megfelelő értékkel. Az alapértelmezett értékBasic256
.Opcionális. Ha aszimmetrikus ellenőrzőkulcsra van szükség, állítsa az
issuedKeyType
elem attribútumát a<message>
következőreAsymmetricKey
: . Az alapértelmezett értékSymmetricKey
.Opcionális. Állítsa be az
issuedTokenType
attribútumot az<message>
elemen.Szükség van az ügyfélre, ha nincs megadva helyi kiállító; nem kötelező a szolgáltatásban.
<issuer>
Elem létrehozása az elem gyermekeként<message>
.Állítsa be az
address
attribútumot az<issuer>
elemre, és adja meg azt a címet, amelyen a biztonsági jogkivonat-szolgáltatás fogadja a jogkivonat-kérelmeket.Opcionális.
<identity>
Gyermekelem hozzáadása és a biztonsági jogkivonat-szolgáltatás identitásának megadásaTovábbi információ: Szolgáltatás identitása és hitelesítése.
Szükség van az ügyfélre, ha nincs megadva helyi kiállító; nem használható a szolgáltatásban. Hozzon létre egy <kötéselemet> a kötések szakaszban, amely a biztonsági jogkivonat szolgáltatással való kommunikációhoz használható. A kötések létrehozásával kapcsolatos további információkért lásd : Szolgáltatáskötés megadása a konfigurációban.
Adja meg az előző lépésben létrehozott kötést az elem és
bindingConfiguration
azbinding
<issuer>
attribútumok beállításával.Nincs használatban az ügyfélen; nem kötelező a szolgáltatásban.
<issuerMetadata>
Elem létrehozása az elem gyermekekéntmessage
<>. Ezután az elem egyikaddress
attribútumában<issuerMetadata>
adja meg azt a címet, amelyen a biztonsági jogkivonat-szolgáltatás közzéteszi a metaadatait. Szükség esetén adjon hozzá egy<identity>
gyermekelemet, és adja meg a biztonsági jogkivonat-szolgáltatás identitását.Az ügyfélen és a szolgáltatáson egyaránt választható.
<claimTypeRequirements>
Elem hozzáadása az elem gyermekéhez<message>
. Adja meg azokat a kötelező és választható jogcímeket, amelyekre a szolgáltatás támaszkodik. Ehhez adjon hozzá <>elemeket az<claimTypeRequirements>
elemhez, és adja meg a jogcím típusát azclaimType
attribútummal. Az attribútum beállításávalisOptional
megadhatja, hogy szükség van-e egy adott jogcímre, vagy nem kötelező.
Példa
Az alábbi kódminta egy imperatív beállítás WSFederationHttpBinding
kódját mutatja be.
// 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