Megosztás a következőn keresztül:


Ú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:

  1. 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, és TransportWithMessageCredentialamely 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óddal Nonevan ü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.

  2. Ö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.

  3. 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.

  4. 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

  1. Hozza létre a WSFederationHttpBinding egy példányát.

  2. Á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.

  3. Állítsa be a NegotiateServiceCredential tulajdonságot a megfelelő módon.

  4. Állítsa be a tulajdonságot a IssuedKeyType következőre SecurityKeyTypeSymmetricKey vagy .AsymmetricKey szükség szerint.

  5. Á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.11.1 SAML-jogkivonatokat jelzi.

  6. 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.

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

  8. 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.

  9. 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 .

  10. 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

  1. Hozzon létre egy <wsFederationHttpBinding> fájlt az< alkalmazáskonfigurációs fájl kötési> elemének gyermekeként.

  2. Hozzon létre egy <kötési> elemet a wsFederationHttpBinding> gyermekelemeként<, és állítsa be az name attribútumot egy megfelelő értékre.

  3. Hozzon létre egy <security> elemet a <kötési> elem gyermekeként.

  4. Állítsa az mode elem attribútumát <security> igény szerint egy vagy TransportWithMessageCredentialtöbb értékreMessage.

  5. <message> Elem létrehozása az elem gyermekeként<security>.

  6. Opcionális. Állítsa be az algorithmSuite attribútumot az <message> elemen egy megfelelő értékkel. Az alapértelmezett érték Basic256.

  7. Opcionális. Ha aszimmetrikus ellenőrzőkulcsra van szükség, állítsa az issuedKeyType elem attribútumát a <message> következőre AsymmetricKey: . Az alapértelmezett érték SymmetricKey.

  8. Opcionális. Állítsa be az issuedTokenType attribútumot az <message> elemen.

  9. 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>.

  10. Á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.

  11. Opcionális. <identity> Gyermekelem hozzáadása és a biztonsági jogkivonat-szolgáltatás identitásának megadása

  12. További információ: Szolgáltatás identitása és hitelesítése.

  13. 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.

  14. Adja meg az előző lépésben létrehozott kötést az elem és bindingConfiguration az binding<issuer> attribútumok beállításával.

  15. 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 egyik address 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.

  16. 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 az claimType attribútummal. Az attribútum beállításával isOptional 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

Lásd még