Procedura: creare un verificatore di identità client personalizzato

La funzionalità identità di Windows Communication Foundation (WCF) consente a un client di specificare in anticipo l'identità prevista del servizio. Ogni volta che un server esegue l'autenticazione al client, l'identità viene confrontata con l'identità prevista. Per una descrizione dell'identità e del relativo funzionamento, vedere Identità del servizio e autenticazione.

Se necessario, la verifica può essere personalizzata utilizzando un verificatore di identità personalizzato. È possibile, ad esempio, eseguire ulteriori controlli di verifica dell'identità del servizio. In questo esempio il verificatore di identità personalizzato verifica le attestazioni aggiuntive nel certificato X.509 restituito dal server. Per un'applicazione di esempio, vedere Identity.

Per estendere la classe EndpointIdentity

  1. Definire una nuova classe che deriva dalla classe EndpointIdentity. Questo esempio attribuisce un nome all'estensione OrgEndpointIdentity.

  2. Aggiungere membri privati insieme a proprietà che verranno utilizzate dalla classe IdentityVerifier estesa per eseguire il controllo dell'identità rispetto alle attestazioni incluse nel token di protezione restituito dal servizio. Questo esempio definisce una proprietà, ovvero OrganizationClaim.

Per estendere la classe IdentityVerifier

  1. Definire una nuova classe che deriva dall'interfaccia IdentityVerifier. Questo esempio attribuisce un nome all'estensione CustomIdentityVerifier.

  2. Eseguire l'override del metodo CheckAccess. Il metodo determina se il controllo dell'identità ha esito positivo o negativo.

  3. Il metodo CheckAccess ha due parametri. Il primo è un'istanza della classe EndpointIdentity. Il secondo è un'istanza della classe AuthorizationContext.

    Nell'implementazione del metodo, esaminare l'insieme di attestazioni restituito dalla proprietà ClaimSets della classe AuthorizationContext ed eseguire i controlli di autenticazione necessari. Questo esempio inizia cercando qualsiasi attestazione di tipo "Nome distinto" e confronta quindi il nome all'estensione della classe EndpointIdentity (OrgEndpointIdentity).

Per implementare il metodo TryGetIdentity

  1. Implementare il metodo TryGetIdentity che determina se un'istanza della classe EndpointIdentity può essere restituita dal client. L'infrastruttura di WCF chiama prima l'implementazione del metodo TryGetIdentity per recuperare l'identità del servizio dal messaggio. L'infrastruttura chiama quindi l'implementazione CheckAccess con le classi EndpointIdentity e AuthorizationContext restituite.

  2. Nel metodo TryGetIdentity inserire il seguente codice:

Per implementare un'associazione personalizzata e impostare il verificatore di identità personalizzato

  1. Creare un metodo che restituisca un oggetto Binding. Questo esempio inizia con la creazione di un'istanza della classe WSHttpBinding e imposta la propria modalità di protezione su Messagee la propria proprietà ClientCredentialType su None.

  2. Creare una classe BindingElementCollection utilizzando il metodo CreateBindingElements.

  3. Restituire la classe SecurityBindingElement dall'insieme ed eseguirne il cast su una variabile SymmetricSecurityBindingElement.

  4. Imposta la proprietà IdentityVerifier della classe LocalClientSecuritySettings su una nuova istanza della classe CustomIdentityVerifier creata precedentemente.

  5. L'associazione personalizzata restituita viene utilizzata per creare un'istanza del client e della classe. Il client può eseguire quindi un controllo di verifica dell'identità del servizio personalizzato, come illustrato nel codice seguente.

Esempio

Nell'esempio seguente viene illustrata un'implementazione completa della classe IdentityVerifier.

Nell'esempio seguente viene illustrata un'implementazione completa della classe EndpointIdentity.

Vedere anche

Riferimenti

ServiceAuthorizationManager
EndpointIdentity
IdentityVerifier

Altre risorse

Identity Sample
How To: Create a Custom AuthorizationManager on a Service
Authorization Policy Sample