Client Validation
Les services publient fréquemment des métadonnées pour activer la génération et la configuration automatiques de types de proxy clients. Lorsque le service n'est pas approuvé, les applications clientes doivent valider que les métadonnées se conforment à la stratégie de l'application cliente en ce qui concerne la sécurité, les transactions, le type de contrat de service, etc. L'exemple suivant montre comment écrire un comportement de point de terminaison client qui valide le point de terminaison de service pour garantir que ce dernier est fiable.
Le service expose quatre points de terminaison de service. Le premier point de terminaison utilise WSDualHttpBinding, le deuxième utilise l’authentification NTLM, le troisième active le flux de transaction et le quatrième utilise l’authentification basée sur les certificats.
Le client utilise la classe MetadataResolver pour récupérer les métadonnées pour le service. Le client met en vigueur une stratégie d’interdiction des liaisons duplex, d’authentification NTLM et de flux de transaction à l’aide d’un comportement de validation. Pour chaque instance ServiceEndpoint importée à partir des métadonnées du service, l’application cliente ajoute une instance du comportement de point de terminaison InternetClientValidatorBehavior
au ServiceEndpoint avant d’essayer d’utiliser un client WCF (Windows Communication Foundation) pour se connecter au point de terminaison. La méthode Validate
du comportement s'exécute avant qu'une opération sur le service soit appelée et met en vigueur la stratégie du client en levant InvalidOperationExceptions
.
Pour générer l'exemple
- Pour générer la solution, suivez les instructions indiquées dans la rubrique Génération des exemples Windows Communication Foundation.
Pour exécuter l'exemple sur le même ordinateur
Ouvrez une Invite de commandes développeur pour Visual Studio avec des privilèges d’administrateur, puis exécutez Setup.bat à partir du dossier d’installation de l’exemple. Tous les certificats requis à l'exécution de l'exemple sont ainsi installés.
Exécutez l'application de service à partir de \service\bin\Debug.
Exécutez l'application cliente à partir de \client\bin\Debug. L'activité du client s'affiche sur son application de console.
Si le client et le service ne parviennent pas à communiquer, consultez Conseils de dépannage pour les exemples WCF.
Supprimez les certificats en exécutant Cleanup.bat une fois l'exemple terminé. D'autres exemples de sécurité utilisent ces mêmes certificats.
Pour exécuter l'exemple sur plusieurs ordinateurs
Sur le serveur, à une Invite de commandes développeur pour Visual Studio avec des privilèges d’administrateur, tapez
setup.bat service
. L’exécution desetup.bat
avec l’argumentservice
crée un certificat de service portant le nom de domaine complet de l’ordinateur, puis exporte ce certificat vers un fichier nommé Service.cer.Sur le serveur, modifiez le fichier App.config en fonction du nouveau nom du certificat. En d’autres termes, remplacez l’attribut
findValue
de l’élément <serviceCertificate> par le nom de domaine complet de l’ordinateur.Copiez le fichier Service.cer du répertoire de service vers le répertoire client sur l'ordinateur client.
Sur le client, ouvrez une Invite de commandes développeur pour Visual Studio avec des privilèges d’administrateur et tapez
setup.bat client
. L’exécution desetup.bat
avec l’argumentclient
crée un certificat client nommé client.com, puis exporte ce certificat vers un fichier nommé Client.cer.Dans le fichier client.cs, modifiez la valeur de l'adresse du point de terminaison MEX et
findValue
pour que le certificat de serveur par défaut corresponde à la nouvelle adresse de votre service. Pour ce faire, remplacez localhost par le nom de domaine complet du serveur. Rebuild (Regénération).Copiez le fichier Client.cer du répertoire client dans le répertoire de service sur le serveur.
Sur le client, exécutez ImportServiceCert.bat à une Invite de commandes développeur pour Visual Studio ouverte avec des privilèges d’administrateur. Cette opération importe le certificat de service du fichier Service.cer dans le magasin CurrentUser - TrustedPeople.
Sur le serveur, exécutez ImportClientCert.bat à partir d’une Invite de commandes développeur pour Visual Studio ouverte avec des privilèges d’administrateur. Le certificat client est ainsi importé à partir du fichier Client.cer dans le magasin LocalMachine - TrustedPeople.
Sur l'ordinateur de service, générez le projet de service dans Visual Studio et exécutez service.exe.
Sur l'ordinateur client, exécutez client.exe.
- Si le client et le service ne parviennent pas à communiquer, consultez Conseils de dépannage pour les exemples WCF.
Pour procéder au nettoyage après exécution de l'exemple
Exécutez Cleanup.bat dans le dossier d'exemples après avoir exécuté l'exemple.
Notes
Ce script ne supprime pas de certificat de service sur un client lors de l'exécution de cet exemple sur plusieurs ordinateurs. Si vous avez exécuté des exemples WCF qui utilisent des certificats sur plusieurs ordinateurs, veillez à supprimer les certificats de service installés dans le magasin CurrentUser - TrustedPeople. Pour ce faire, utilisez la ligne de commande suivante :
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com
.