Procedura: creare una classe WSFederationHttpBinding

In Windows Communication Foundation (WCF), la classe WSFederationHttpBinding (wsFederationHttpBinding element nella configurazione) fornisce un meccanismo per l'esposizione di un servizio federato, ovvero un servizio che richiede ai client di autenticarsi utilizzando un token di protezione rilasciato da un servizio token di protezione. In questo argomento viene illustrato come impostare una classe WSFederationHttpBinding nel codice e nella configurazione. Una volta creata l'associazione, è possibile impostare un endpoint per utilizzarla.

I passaggi di base sono elencati di seguito:

  1. Selezionare una modalità di protezione. 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.

    Nota

    La classe WSFederationHttpBinding supporta anche None come modalità di protezione. Questa modalità non è protetta e viene fornita solo a scopo di debug. Se un endpoint di servizio viene distribuito con una classe WSFederationHttpBinding e la relativa modalità di protezione impostata su None, l'associazione client che ne risulta (generata da ServiceModel Metadata Utility Tool (Svcutil.exe)) è una classe WsHttpBinding con una modalità di protezione None.

    Diversamente da altre associazioni fornite dal sistema, non è necessario selezionare un tipo di credenziale client quando si utilizza WSFederationHttpBinding, poiché il tipo di credenziale client è sempre un token rilasciato. WCF acquisisce un token da un'emittente e lo presenta al servizio per autenticare il client.

  2. Sui client federati, impostare la proprietà IssuerAddress sull'URL del servizio token di protezione. Impostare la proprietà IssuerBinding sull'associazione da utilizzare per comunicare con il servizio token di protezione.

  3. Facoltativo. Impostare la proprietà IssuedTokenType sull'URI (Uniform Resource Identifier) di un tipo di token. Nei servizi federati, specificare il tipo di token previsto dal servizio. Sui client federati, specificare il tipo di token richiesto dal client al servizio token di protezione.
    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, utilizzando un token SAML (Security Assertions Markup Language) 1.1.
    L'URI per un token SAML 1.1 è "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1".

  4. Facoltativo. Sui servizi federati, impostare la proprietà IssuerMetadataAddress sull'URL dei metadati di un servizio token di protezione. L'endpoint dei metadati consente ai client del servizio di selezionare una coppia associazione/endpoint appropriata, se il servizio è configurato per pubblicare metadati. Per ulteriori informazioni sulla pubblicazione di metadati, vedere Pubblicazione di metadati.

È inoltre possibile impostare altre proprietà, inclusi tipo di chiave utilizzato come chiave di prova nel token rilasciato, suite di algoritmi da utilizzare 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 protezione.

Nota

La proprietà NegotiateServiceCredential è rilevante solo quando SecurityMode è impostata su Message. Se SecurityMode è impostata su TransportWithMessageCredential, la proprietà NegotiateServiceCredential viene ignorata.

Per configurare una classe WSFederationHttpBinding nel codice

  1. Creare un'istanza di WSFederationHttpBinding.

  2. Impostare la proprietà Mode su Message o TransportWithMessageCredential in base alle necessità. Se è necessaria una suite di algoritmi diversa da Basic256, impostare la proprietà AlgorithmSuite su un valore derivato da SecurityAlgorithmSuite.

  3. Impostare la proprietà NegotiateServiceCredential in base alle necessità.

  4. Impostare la proprietà IssuedKeyType su SecurityKeyType SymmetricKey o .AsymmetricKey in base alle necessità.

  5. Impostare la proprietà IssuedTokenType sul valore appropriato. Se non viene impostato alcun valore, WCF utilizza per impostazione predefinita , che indica token SAML 1.1.

  6. Obbligatorio sul client se non viene specificata alcuna emittente locale; facoltativo sul servizio. Creare una classe EndpointAddress che contenga le informazioni sull'indirizzo e l'identità del servizio token di protezione e assegnare l'istanza di EndpointAddress alla proprietà IssuerAddress.

  7. Obbligatorio sul client se non viene specificata alcuna emittente locale; non utilizzato sul servizio. Creare una classe Binding per SecurityTokenService e assegnare l'istanza di Binding alla proprietà IssuerBinding.

  8. Non utilizzato sul client; facoltativo sul servizio. Creare un'istanza di EndpointAddress per i metadati del servizio token di protezione e assegnarla alla proprietà IssuerMetadataAddress.

  9. Facoltativo sul client e sul servizio. Creare e aggiungere una o più istanze di ClaimTypeRequirement all'insieme restituito dalla proprietà ClaimTypeRequirements.

  10. Facoltativo sul client e sul servizio. Creare e aggiungere una o più istanze di XmlElement all'insieme restituito dalla proprietà TokenRequestParameters.

Per creare un endpoint federato nella configurazione

  1. Creare un wsFederationHttpBinding element come figlio dell'elemento <bindings> nel file di configurazione dell'applicazione.

  2. Creare un elemento binding come figlio dell'wsFederationHttpBinding element e impostare l'attributo name su un valore appropriato.

  3. Creare un elemento <security> come figlio dell'elemento binding.

  4. Impostare l'attributo mode nell'elemento <security> su un valore di Message o TransportWithMessageCredential, in base alle necessità.

  5. Creare un elemento <message> come figlio dell'elemento <security>.

  6. Facoltativo. Impostare l'attributo algorithmSuite sull'elemento <message> con un valore appropriato. L'impostazione predefinita è Basic256.

  7. Facoltativo. Se è necessaria una chiave di prova asimmetrica, impostare l'attributo issuedKeyType dell'elemento <message> su AsymmetricKey. L'impostazione predefinita è SymmetricKey.

  8. Facoltativo. Impostare l'attributo issuedTokenType sull'elemento <message>.

  9. Obbligatorio sul client se non viene specificata alcuna emittente locale; facoltativo sul servizio. Creare un elemento <issuer> come figlio dell'elemento <message>.

  10. Impostare l'attributo address sull'elemento <issuer> e specificare l'indirizzo in cui il servizio token di protezione accetta richieste del token.

  11. Facoltativo. Aggiungere un elemento <identity> figlio e specificare l'identità del servizio token di protezione

  12. Per ulteriori informazioni, vedere Identità del servizio e autenticazione.

  13. Obbligatorio sul client se non viene specificata alcuna emittente locale; non utilizzato sul servizio. Creare l'elemento <binding> nella sezione delle associazioni utilizzabile per comunicare con il servizio token di protezione. Per ulteriori informazioni sulla creazione di un'associazione, vedere Procedura: specificare un'associazione al servizio in configurazione.

  14. Specificare l'associazione creata nel passaggio precedente impostando gli attributi binding e bindingConfiguration dell'elemento <issuer>.

  15. Non utilizzato sul client; facoltativo sul servizio. Creare un elemento <issuerMetadata> come figlio dell'elemento <message>. Quindi, in un attributo address sull'elemento <issuerMetadata>, specificare l'indirizzo in cui il servizio token di protezione deve pubblicare i propri metadati. Facoltativamente, aggiungere un elemento <identity> figlio e specificare l'identità del servizio token di protezione

  16. Facoltativo sul client e sul servizio. Aggiungere un elemento <claimTypeRequirements> come figlio dell'elemento <message>. Specificare le attestazioni obbligatorie e facoltative su cui si basa il servizio aggiungendo elementi <add> of <claimTypeRequirements> all'elemento <claimTypeRequirements> e specificando il tipo di attestazione con l'attributo claimType. Specificare se una determinata attestazione è obbligatoria o facoltativa impostando l'attributo isOptional.

Esempio

Nell'esempio seguente viene illustrato il codice per l'impostazione di una classe WSFederationHttpBinding in modo imperativo.

Vedere anche

Attività

Procedura: disattivare sessioni protette in un'associazione WSFederationHttpBinding

Concetti

Federazione

Altre risorse

Federation Sample