Procedura: creare credenziali client e del servizio personalizzate
In questo argomento viene illustrato come implementare credenziali client e del servizio personalizzate e come utilizzare credenziali personalizzate dal codice dell'applicazione.
Classi di estendibilità delle credenziali
Le classi ClientCredentials e ServiceCredentials sono i punti di ingresso principali all'estendibilità della protezione Windows Communication Foundation (WCF). Queste classi delle credenziali forniscono le API che consentono al codice dell'applicazione di impostare le informazioni sulle credenziali e convertire i tipi di credenziali in token di protezione. (I token di protezione sono la forma utilizzata per trasmettere le informazioni sulle credenziali all'interno di messaggi SOAP. Le responsabilità di queste classi di credenziali possono essere divise in due aree:
- Fornire le API affinché le applicazioni impostino le informazioni sulle credenziali.
- Fungere da factory per le implementazioni SecurityTokenManager.
Entrambe le classi ClientCredentials e ServiceCredentials ereditano dalla classe astratta SecurityCredentialsManager che definisce il contratto per la restituzione di SecurityTokenManager.
Per ulteriori informazioni sulle classi di credenziali e sul loro ruolo nell'architettura della protezione WCF, vedere Architettura della protezione.
Le implementazioni predefinite fornite in WCF supportano i tipi di credenziali forniti dal sistema e creano un gestore del token di protezione in grado di gestire quei tipi di credenziali.
Motivi di personalizzazione
Esistono più motivi per personalizzare classi di credenziali client o del servizio. Innanzitutto vi è l'esigenza di cambiare il comportamento di protezione WCF predefinito in merito alla gestione dei tipi di credenziali forniti dal sistema, in particolare per le ragioni seguenti:
- Necessità di modifiche che non sono possibili utilizzando altri punti di estendibilità.
- Necessità di aggiungere nuovi tipi di credenziali.
- Necessità di aggiungere nuovi tipi di token di protezione personalizzati.
In questo argomento viene illustrato come implementare credenziali client e del servizio personalizzate e come utilizzarle dal codice dell'applicazione.
Primo passaggio
La creazione di una classe di credenziali personalizzate è solo il primo passaggio, perché la ragione della personalizzazione è modificare il comportamento di WCF in merito al provisioning delle credenziali, alla serializzazione del token di protezione o all'autenticazione. Negli altri argomenti di questa sezione viene descritto come creare serializzatori e autenticatori personalizzati. In questo caso, la creazione di una classe di credenziali personalizzate è il primo tema dei passaggi. Le azioni successive (creazione di serializzatori e autenticatori personalizzati) possono essere eseguite solo dopo avere creato credenziali personalizzate. Gli argomenti aggiuntivi basati su questo argomento includono:
- Procedura: creare un provider di token di protezione personalizzati
- Procedura: creare un autenticatore del token di protezione personalizzato
- Procedura: creare un token personalizzato.
Procedure
Implementazione di credenziali client personalizzate
Definire una nuova classe derivata dalla classe ClientCredentials.
Facoltativo. Aggiungere nuove proprietà per fornire metodi o proprietà per nuovi tipi di credenziali. Se non vengono aggiunti nuovi tipi di credenziali, ignorare questo passaggio. Nell'esempio seguente viene aggiunta una proprietà
CreditCardNumber
.Eseguire l'override del metodo CreateSecurityTokenManager. Questo metodo verrà chiamato automaticamente dall'infrastruttura di protezione WCF quando viene utilizzata la credenziale client personalizzata. Questo metodo è responsabile della creazione e della restituzione di un'istanza di un'implementazione della classe SecurityTokenManager. Nella procedura seguente viene descritto come creare questa implementazione.
Eseguire l'override del metodo CloneCore.
Implementazione del gestore del token di protezione client personalizzato
Definire una nuova classe derivata da ClientCredentialsSecurityTokenManager.
Facoltativo. Eseguire l'override del metodo CreateSecurityTokenProvider, se è necessario creare un'implementazione SecurityTokenProvider personalizzata. Per ulteriori informazioni sui provider di token di protezione personalizzati, vedere Procedura: creare un provider di token di protezione personalizzati.
Facoltativo. Eseguire l'override del metodo CreateSecurityTokenAuthenticator, se è necessario creare un'implementazione SecurityTokenAuthenticator personalizzata. Per ulteriori informazioni sugli autenticatori di token di protezione personalizzati, vedere Procedura: creare un autenticatore del token di protezione personalizzato.
Facoltativo. Eseguire l'override del metodo CreateSecurityTokenSerializer, se è necessario creare un SecurityTokenSerializer personalizzato. Per ulteriori informazioni su token di protezione personalizzati e serializzatori del token di protezione personalizzati, vedere Procedura: creare un token personalizzato.
Utilizzo di credenziali client personalizzate dal codice dell'applicazione
Creare un'istanza del client generato che rappresenta l'interfaccia del servizio oppure creare un'istanza di ChannelFactory che punta a un servizio con il quale si desidera comunicare.
Rimuovere il comportamento delle credenziali client fornite dal sistema dall'insieme Behaviors, al quale è possibile accedere tramite la proprietà Endpoint.
Creare una nuova istanza di una classe di credenziali client personalizzate e aggiungerla all'insieme Behaviors, al quale è possibile accedere tramite la proprietà Endpoint.
Nella procedura precedente viene illustrato come utilizzare credenziali client dal codice dell'applicazione. Le credenziali WCF possono essere configurate anche utilizzando il file di configurazione dell'applicazione. Spesso è preferibile utilizzare la configurazione dell'applicazione anziché la specifica a livello di codice, perché consente di modificare i parametri dell'applicazione senza dovere modificare l'origine, ricompilare e ridistribuire.
Nella prossima procedura viene illustrato come fornire supporto per la configurazione di credenziali personalizzate.
Creazione di un gestore di configurazione per credenziali client personalizzate
Definire una nuova classe derivata da ClientCredentialsElement.
Facoltativo. Aggiungere proprietà per tutti i parametri di configurazione aggiuntivi che si desidera esporre tramite la configurazione dell'applicazione. Nell'esempio seguente viene aggiunta una proprietà denominata
CreditCardNumber
.Eseguire l'override della proprietà BehaviorType per restituire il tipo di classe di credenziali client personalizzate creata con l'elemento di configurazione.
Eseguire l'override del metodo CreateBehavior. Il metodo è responsabile della creazione e restituzione di un'istanza della classe di credenziali personalizzati basata sulle impostazioni caricate dal file di configurazione. Chiamare il metodo ApplyConfiguration di base da questo metodo per recuperare le impostazioni delle credenziali fornite dal sistema caricate nell'istanza delle credenziali client personalizzate.
Facoltativo. Se nel passaggio 2 sono state aggiunte altre proprietà, è necessario eseguire l'override della proprietà Properties per registrare le impostazioni di configurazione aggiuntive affinché il framework di configurazione le riconosca. Combinare le proprietà con le proprietà della classe di base per consentire la configurazione delle impostazioni fornite dal sistema tramite questo elemento di configurazione delle credenziali client personalizzate.
Quando disponibile, la classe del gestore di configurazione può essere integrata nel framework di configurazione di WCF. Ciò consente di utilizzare le credenziali client personalizzate negli elementi di comportamento dell'endpoint client, come illustrato nella procedura seguente.
Registrazione e utilizzo di un gestore di configurazione di credenziali client personalizzate nella configurazione dell'applicazione
Aggiungere un elemento <extensions> e un elemento <behaviorExtensions> al file di configurazione.
Aggiungere un elemento <add> all'elemento <behaviorExtensions> e impostare l'attributo name su un valore appropriato.
Impostare l'attributo type sul nome del tipo completo. Includere inoltre il nome e altri attributi dell'assembly.
<system.serviceModel> <extensions> <behaviorExtensions> <add name="myClientCredentials" type="Microsoft.ServiceModel.Samples.MyClientCredentialsConfigHandler, CustomCredentials, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> </behaviorExtensions> </extensions> <system.serviceModel>
Dopo avere registrato il gestore di configurazione, al posto dell'elemento <clientCredentials> fornito dal sistema, nello stesso file di configurazione è possibile utilizzare l'elemento delle credenziali personalizzate. È possibile utilizzare sia le proprietà fornite dal sistema che qualsiasi nuova proprietà aggiunta all'implementazione del gestore di configurazione. Nell'esempio seguente viene impostato il valore di una proprietà personalizzata utilizzando l'attributo creditCardNumber.
<behaviors> <endpointBehaviors> <behavior name="myClientCredentialsBehavior"> <myClientCredentials creditCardNumber="123-123-123"/> </behavior> </endpointBehaviors> </behaviors>
Implementazione di credenziali del servizio personalizzate
Definire una nuova classe derivata da ServiceCredentials.
Facoltativo. Aggiungere nuove proprietà per fornire API per i nuovi valori delle credenziali che vengono aggiunte. Se non vengono aggiunti nuovi valori delle credenziali, ignorare questo passaggio. Nell'esempio seguente viene aggiunta una proprietà
AdditionalCertificate
.Eseguire l'override del metodo CreateSecurityTokenManager. Questo metodo viene chiamato automaticamente dall'infrastruttura WCF quando viene utilizzata la credenziale client personalizzata. Il metodo è responsabile della creazione e della restituzione di un'istanza di un'implementazione della classe SecurityTokenManager, descritta nella procedura seguente.
Facoltativo. Eseguire l'override del metodo CloneCore. È richiesto solo se si aggiungono nuove proprietà o campi interni all'implementazione delle credenziali client personalizzate.
Implementazione di un gestore del token di protezione del servizio personalizzato
Definire una nuova classe derivata dalla classe ServiceCredentialsSecurityTokenManager.
Facoltativo. Eseguire l'override del metodo CreateSecurityTokenProvider, se è necessario creare un'implementazione SecurityTokenProvider personalizzata. Per ulteriori informazioni sulla creazione di provider di token di protezione personalizzati, vedere Procedura: creare un provider di token di protezione personalizzati.
Facoltativo. Eseguire l'override del metodo CreateSecurityTokenAuthenticator, se è necessario creare un'implementazione SecurityTokenAuthenticator personalizzata. Per ulteriori informazioni sugli autenticatori di token di protezione personalizzati, vedere Procedura: creare un autenticatore del token di protezione personalizzato.
Facoltativo. Eseguire l'override del metodo CreateSecurityTokenSerializer, se è necessario creare un SecurityTokenSerializer personalizzato. Per ulteriori informazioni sui token di protezione personalizzati e sui serializzatori di token di protezione personalizzati, vedere Procedura: creare un token personalizzato.
Utilizzo di credenziali del servizio personalizzate dal codice dell'applicazione
Creare un'istanza di ServiceHost.
Rimuovere il comportamento delle credenziali del servizio fornite dal sistema dall'insieme Behaviors.
Creare una nuova istanza della classe di credenziali del servizio personalizzate e aggiungerla all'insieme Behaviors.
Aggiungere il supporto per la configurazione utilizzando i passaggi descritti in precedenza nelle procedure "Creating a configuration handler for custom client credentials" e "Registering and using a custom client credentials configuration handler in the application configuration." L'unica differenza è nell'utilizzo della classe ServiceCredentialsElement invece che della classe ClientCredentialsElement come classe base per il gestore della configurazione. L'elemento credenziale personalizzata del servizio può quindi essere utilizzato ovunque sia utilizzato l'elemento <serviceCredentials>
fornito dal sistema.
Vedere anche
Attività
Procedura: creare un provider di token di protezione personalizzati
Riferimenti
ClientCredentials
ServiceCredentials
SecurityCredentialsManager
SecurityTokenManager
ClientCredentialsElement
ServiceCredentialsElement
Concetti
Procedura: creare un autenticatore del token di protezione personalizzato
Procedura: creare un token personalizzato