Procedura: creare una classe WSFederationHttpBindingHow to: Create a WSFederationHttpBinding

In Windows Communication Foundation (WCF), il WSFederationHttpBinding classe (<wsFederationHttpBinding > nella configurazione) fornisce un meccanismo per l'esposizione di un servizio federato.In Windows Communication Foundation (WCF), the WSFederationHttpBinding class (<wsFederationHttpBinding> in configuration) provides a mechanism for exposing a federated service. ovvero un servizio che richiede ai client di autenticarsi usando un token di sicurezza rilasciato da un servizio token di sicurezza.That is, a service that requires clients to authenticate using a security token issued by a security token service. In questo argomento viene illustrato come impostare una classe WSFederationHttpBinding nel codice e nella configurazione.This topic shows how to set up a WSFederationHttpBinding in both code and configuration. Una volta creata l'associazione, è possibile impostare un endpoint per usarla.Once the binding is created, you can set up an endpoint to use that binding.

I passaggi di base sono elencati di seguito:The basic steps are outlined as follows:

  1. Selezionare una modalità di sicurezza.Select a security mode. La classe WSFederationHttpBinding supporta Message, che assicura protezione end-to-end a livello di messaggio, anche su più hop, e TransportWithMessageCredential, che offre prestazioni migliori nei casi in cui il client e il servizio possono stabilire una connessione diretta su HTTPS.The WSFederationHttpBinding supports Message, which provides end-to-end security at the message level, even across multiple hops, and TransportWithMessageCredential, which provides better performance in cases where the client and the service can make a direct connection over HTTPS.

    Nota

    La classe WSFederationHttpBinding supporta anche None come modalità di sicurezza.The WSFederationHttpBinding also supports None as a security mode. Questa modalità non è protetta e viene fornita solo a scopo di debug.This mode is not secure and is provided for debugging purposes only. Se un endpoint del servizio viene distribuito con un WSFederationHttpBinding con la modalità di sicurezza impostata su None, l'associazione del client risultante (generati dal strumento ServiceModel Metadata Utility Tool (Svcutil.exe)) è un < xref:System.ServiceModel.WsHttpBinding> con la modalità di sicurezza None.If a service endpoint is deployed with a WSFederationHttpBinding with its security mode set to None, the resulting client binding (generated by the ServiceModel Metadata Utility Tool (Svcutil.exe)) is a < xref:System.ServiceModel.WsHttpBinding> with a security mode of None.

    Diversamente da altre associazioni fornite dal sistema, non è necessario selezionare un tipo di credenziale client quando si usa WSFederationHttpBinding,Unlike other system-provided bindings, it is not necessary to select a client credential type when using the WSFederationHttpBinding. poiché il tipo di credenziale client è sempre un token rilasciato.This is because the client credential type is always an issued token. WCF acquisisce un token da un'emittente specificato e lo presenta al servizio per autenticare il client.WCF acquires a token from a specified issuer and presents that token to the service to authenticate the client.

  2. Sui client federati, impostare la proprietà IssuerAddress sull'URL del servizio token di sicurezza.On federated clients, set the IssuerAddress property to the URL of the security token service. Impostare la proprietà IssuerBinding sull'associazione da usare per comunicare con il servizio token di sicurezza.Set the IssuerBinding to the binding to use to communicate with the security token service.

  3. Parametro facoltativo.Optional. Impostare la proprietà IssuedTokenType sull'URI (Uniform Resource Identifier) di un tipo di token.Set the IssuedTokenType property to the Uniform Resource Identifier (URI) of a token type. Nei servizi federati, specificare il tipo di token previsto dal servizio.On federated services, specify the token type that the service expects. Sui client federati, specificare il tipo di token richiesto dal client al servizio token di sicurezza.On federated clients, specify the token type the client requests from the security token service.

    Se non viene specificato alcun tipo di token, i client generano token RST (Request Security Token) WS-Trust senza un URI del tipo di token e i servizi prevedono che l'autenticazione client venga eseguita, per impostazione predefinita, usando un token SAML (Security Assertions Markup Language) 1.1.If no token type is specified, clients generate WS-Trust Request Security Tokens (RSTs) without a token type URI, and services expect client authentication using a Security Assertions Markup Language (SAML) 1.1 token by default.

    L'URI per un token SAML 1.1 è "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1".The URI for a SAML 1.1 token is "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1".

  4. Facoltativo.Optional. Sui servizi federati, impostare la proprietà IssuerMetadataAddress sull'URL dei metadati di un servizio token di sicurezza.On federated services, set the IssuerMetadataAddress property to the metadata URL of a security token service. L'endpoint dei metadati consente ai client del servizio di selezionare una coppia associazione/endpoint appropriata, se il servizio è configurato per pubblicare metadati.The metadata endpoint enables clients of the service to select an appropriate binding/endpoint pair, if the service is configured to publish metadata. Per ulteriori informazioni sulla pubblicazione di metadati, vedere pubblicazione dei metadati.For more information about publishing metadata, see Publishing Metadata.

È inoltre possibile impostare altre proprietà, inclusi tipo di chiave usato come chiave di prova nel token rilasciato, gruppo di algoritmi da usare tra il client e il servizio, indicazione circa la necessità di negoziare o specificare esplicitamente la credenziale del servizio, tutte le attestazioni specifiche che il servizio prevede che il token rilasciato contenga e qualsiasi elemento XML aggiuntivo da aggiungere alla richiesta inviata dal client al servizio token di sicurezza.You can also set other properties, including the type of key used as a proof key in the issued token, the algorithm suite to use between the client and the service, whether to negotiate or explicitly specify the service credential, any specific claims the service expects the issued token to contain, and any additional XML elements that must be added to the request the client sends to the security token service.

Nota

La proprietà NegotiateServiceCredential è rilevante solo quando SecurityMode è impostata su Message.The NegotiateServiceCredential property is only relevant when the SecurityMode is set to Message. Se SecurityMode è impostata su TransportWithMessageCredential, la proprietà NegotiateServiceCredential viene ignorata.If SecurityMode is set to TransportWithMessageCredential, then the NegotiateServiceCredential property is ignored.

Per configurare una classe WSFederationHttpBinding nel codiceTo configure a WSFederationHttpBinding in code

  1. Creare un'istanza di WSFederationHttpBinding.Create an instance of the WSFederationHttpBinding.

  2. Impostare la proprietà Mode su WSFederationHttpSecurityMode o Message in base alle necessità.Set the Mode property to WSFederationHttpSecurityMode or Message as required. Se un gruppo di algoritmi diverso da Basic256 è obbligatorio, impostare il AlgorithmSuite proprietà su un valore derivato da SecurityAlgorithmSuite.If an algorithm suite other than Basic256 is required, set the AlgorithmSuite property to a value taken from SecurityAlgorithmSuite.

  3. Impostare la proprietà NegotiateServiceCredential in base alle necessità.Set the NegotiateServiceCredential property as appropriate.

  4. Impostare il IssuedKeyType proprietà da SecurityKeyType SymmetricKey o.AsymmetricKeySet the IssuedKeyType property to SecurityKeyTypeSymmetricKey or .AsymmetricKey in base alle necessità.as required.

  5. Impostare la proprietà IssuedTokenType sul valore appropriato.Set the IssuedTokenType property to the appropriate value. Se è impostato alcun valore, WCF valore predefinito è "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1", che indica token SAML 1.1.If no value is set, WCF defaults to "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1", which indicates SAML 1.1 tokens.

  6. Obbligatorio sul client se non viene specificata alcuna emittente locale; facoltativo sul servizio.Required on the client if no local issuer is specified; optional on the service. Creare una classe EndpointAddress che contenga le informazioni sull'indirizzo e l'identità del servizio token di sicurezza e assegnare l'istanza di EndpointAddress alla proprietà IssuerAddress.Create an EndpointAddress that contains the address and identity information of the security token service and assign the EndpointAddress instance to the IssuerAddress property.

  7. Obbligatorio sul client se non viene specificata alcuna emittente locale; non usato sul servizio.Required on the client if no local issuer is specified; not used on the service. Creare un Binding per il SecurityTokenService e assegnare il Binding istanza per il IssuerBinding proprietà.Create a Binding for the SecurityTokenService and assign the Binding instance to the IssuerBinding property.

  8. Non usato sul client; facoltativo sul servizio.Not used on the client; optional on the service. Creare un'istanza di EndpointAddress per i metadati del servizio token di sicurezza e assegnarla alla proprietà IssuerMetadataAddress.Create an EndpointAddress instance for the metadata of the security token service and assign it to the IssuerMetadataAddress property.

  9. Facoltativo sul client e sul servizio.Optional on both the client and the service. Creare e aggiungere una o più istanze di ClaimTypeRequirement alla raccolta restituita dalla proprietà ClaimTypeRequirements.Create and add one or more ClaimTypeRequirement instances to the collection returned by the ClaimTypeRequirements property.

  10. Facoltativo sul client e sul servizio.Optional on both the client and the service. Creare e aggiungere una o più istanze di XmlElement alla raccolta restituita dalla proprietà TokenRequestParameters.Create and add one or more XmlElement instances to the collection returned by the TokenRequestParameters property.

Per creare un endpoint federato nella configurazioneTo create a federated endpoint in configuration

  1. Creare un <wsFederationHttpBinding > come elemento figlio di <associazioni > elemento nel file di configurazione dell'applicazione.Create a <wsFederationHttpBinding> as a child of the <bindings> element in the application configuration file.

  2. Creare un <associazione > come elemento figlio di <wsFederationHttpBinding > e impostare il name attributo su un valore appropriato.Create a <binding> element as a child of <wsFederationHttpBinding> and set the name attribute to an appropriate value.

  3. Creare un <security> come figlio dell'elemento di <associazione > elemento.Create a <security> element as a child of the <binding> element.

  4. Impostare l'attributo mode nell'elemento <security>``TransportWithMessageCredential su un valore di Message o , in base alle necessità.Set the mode attribute on the <security> element to a value of Message or TransportWithMessageCredential, as required.

  5. Creare un elemento <message> come figlio dell'elemento <security>.Create a <message> element as a child of the <security> element.

  6. Parametro facoltativo.Optional. Impostare l'attributo algorithmSuite sull'elemento <message> con un valore appropriato.Set the algorithmSuite attribute on the <message> element with an appropriate value. Il valore predefinito è Basic256.The default is Basic256.

  7. Parametro facoltativo.Optional. Se è necessaria una chiave di prova asimmetrica, impostare l'attributo issuedKeyType dell'elemento <message> su AsymmetricKey.If an asymmetric proof key is required, set the issuedKeyType attribute of the <message> element to AsymmetricKey. Il valore predefinito è SymmetricKey.The default is SymmetricKey.

  8. Parametro facoltativo.Optional. Impostare l'attributo issuedTokenType sull'elemento <message>.Set the issuedTokenType attribute on the <message> element.

  9. Obbligatorio sul client se non viene specificata alcuna emittente locale; facoltativo sul servizio.Required on the client if no local issuer is specified; optional on the service. Creare un elemento <issuer> come figlio dell'elemento <message>.Create an <issuer> element as a child of the <message> element.

  10. Impostare l'attributo address sull'elemento <issuer> e specificare l'indirizzo in cui il servizio token di sicurezza accetta richieste del token.Set the address attribute to the <issuer> element and specify the address at which the security token service accepts token requests.

  11. Parametro facoltativo.Optional. Aggiungere un elemento <identity> figlio e specificare l'identità del servizio token di sicurezzaAdd an <identity> child element and specify the identity of the security token service

  12. Per ulteriori informazioni, vedere autenticazione e identità del servizio.For more information, see Service Identity and Authentication.

  13. Obbligatorio sul client se non viene specificata alcuna emittente locale; non usato sul servizio.Required on the client if no local issuer is specified; not used on the service. Creare un <associazione > elemento nella sezione delle associazioni che può essere utilizzata per comunicare con il servizio token di sicurezza.Create a <binding> element in the bindings section that can be used to communicate with the security token service. Per ulteriori informazioni sulla creazione di un'associazione, vedere procedura: specificare un'associazione al servizio nella configurazione.For more information about creating a binding, see How to: Specify a Service Binding in Configuration.

  14. Specificare l'associazione creata nel passaggio precedente impostando gli attributi binding e bindingConfiguration dell'elemento <issuer>.Specify the binding created in the previous step by setting the binding and bindingConfiguration attributes of the <issuer> element.

  15. Non usato sul client; facoltativo sul servizio.Not used on the client; optional on the service. Creare un elemento <issuerMetadata> come figlio dell'elemento <message>.Create an <issuerMetadata> element as a child of the <message> element. Quindi, in un attributo address sull'elemento <issuerMetadata>, specificare l'indirizzo in cui il servizio token di sicurezza deve pubblicare i propri metadati.Then, in an address attribute on the <issuerMetadata> element, specify the address at which the security token service is to publish its metadata. Facoltativamente, aggiungere un elemento <identity> figlio e specificare l'identità del servizio token di sicurezzaOptionally, add an <identity> child element and specify the identity of the security token service.

  16. Facoltativo sul client e sul servizio.Optional on both the client and the service. Aggiungere un elemento <claimTypeRequirements> come figlio dell'elemento <message>.Add a <claimTypeRequirements> element as a child of the <message> element. Specificare attestazioni obbligatorie e facoltative che il servizio si basa su aggiungendo <aggiungere > elementi per il <claimTypeRequirements> tipo di elemento e specificando l'attestazione con il claimType attributo.Specify required and optional claims that the service relies on by adding <add> elements to the <claimTypeRequirements> element and specifying the claim type with the claimType attribute. Specificare se una determinata attestazione è obbligatoria o facoltativa impostando l'attributo isOptional.Specify whether a given claim is required or optional by setting the isOptional attribute.

EsempioExample

Nell'esempio seguente viene illustrato il codice per l'impostazione di una classe WSFederationHttpBinding in modo imperativo.The following code sample shows code for setting up a WSFederationHttpBinding imperatively.

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

Vedere ancheSee Also

FederazioneFederation
Esempio di federazioneFederation Sample
Procedura: Disabilitare sessioni sicure in un'associazione WSFederationHttpBindingHow to: Disable Secure Sessions on a WSFederationHttpBinding