Comment : créer un vérificateur d'identité du client personnalisé
La fonctionnalité d'identité de Windows Communication Foundation (WCF) active un client pour spécifier à l'avance l'identité attendue du service. Lorsqu'un serveur s'authentifie auprès du client, l'identité est vérifiée par rapport à l'identité attendue. (Pour obtenir une explication de l'identité et de son fonctionnement, consultez Identité du service et authentification.)
Si nécessaire, la vérification peut être personnalisée à l'aide d'un vérificateur d'identité personnalisé. Par exemple, vous pouvez effectuer des contrôles supplémentaires de vérification de l'identité du service. Dans cet exemple, le vérificateur d'identité personnalisé vérifie des revendications supplémentaires dans le certificat X.509 retourné par le serveur. Pour obtenir un exemple d'application, consultez Identity.
Pour étendre la classe EndpointIdentity
Définissez une nouvelle classe dérivée de la classe EndpointIdentity. Cet exemple nomme l'extension
OrgEndpointIdentity
.Ajoutez les membres privés avec les propriétés qui seront utilisées par la classe IdentityVerifier étendue pour exécuter le contrôle d'identité par rapport aux revendications dans le jeton de sécurité retourné par le service. Cet exemple définit une propriété : la propriété
OrganizationClaim
.
Pour étendre la classe IdentityVerifier
Définissez une nouvelle classe dérivée de IdentityVerifier. Cet exemple nomme l'extension
CustomIdentityVerifier
.Substituez la méthode CheckAccess. La méthode détermine si le contrôle d'identité a réussi ou a échoué.
La méthode CheckAccess possède deux paramètres. Le premier est une instance de la classe EndpointIdentity. Le second est une instance de la classe AuthorizationContext.
Dans l'implémentation de méthode, examinez la collection de revendications retournée par la propriété ClaimSets de la classe AuthorizationContext et exécutez des contrôles d'authentification selon les besoins. Cet exemple commence par rechercher les revendications de type « Distinguished Name » puis compare le nom à l'extension du EndpointIdentity (
OrgEndpointIdentity
).
Pour implémenter la méthode TryGetIdentity
Implémentez la méthode TryGetIdentity qui détermine si une instance de la classe EndpointIdentity peut être retournée par le client. L'infrastructure WCF appelle d'abord l'implémentation de la méthode TryGetIdentity pour récupérer l'identité du service à partir du message. Ensuite, l'infrastructure appelle l'implémentation CheckAccess avec les EndpointIdentity et AuthorizationContext retournés.
Dans la méthode TryGetIdentity, insérez le code suivant :
Pour implémenter une liaison personnalisée et définir l'IdentityVerifier personnalisé
Créez une méthode qui retourne un objet Binding. Cet exemple commence par créer une instance de la classe WSHttpBinding et affecte à son mode de sécurité la valeur Message, et à son ClientCredentialType la valeur None.
Créez un BindingElementCollection à l'aide de la méthode CreateBindingElements.
Retournez le SecurityBindingElement de la collection et effectuez un cast en une variable SymmetricSecurityBindingElement.
Affectez à la propriété IdentityVerifier de la classe LocalClientSecuritySettings une nouvelle instance de la classe
CustomIdentityVerifier
créée précédemment.La liaison personnalisée retournée est utilisée pour créer une instance du client et de la classe. Le client peut effectuer ensuite une vérification personnalisée de l'identité du service comme indiqué dans le code suivant.
Exemple
L'exemple suivant illustre une implémentation complète de la classe IdentityVerifier.
L'exemple suivant illustre une implémentation complète de la classe EndpointIdentity.
Voir aussi
Référence
ServiceAuthorizationManager
EndpointIdentity
IdentityVerifier
Autres ressources
Identity Sample
How To: Create a Custom AuthorizationManager on a Service
Authorization Policy Sample