Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’exemple MessageSecurity montre comment implémenter une application qui utilise la sécurité des messages et des basicHttpBinding messages. Cet exemple est basé sur le guide de démarrage qui implémente un service de calculatrice.
Remarque
La procédure d’installation et les instructions de génération de cet exemple se trouvent à la fin de cette rubrique.
Le mode de sécurité de basicHttpBinding peut être défini sur les valeurs suivantes : Message, , Transport, TransportWithMessageCredentialTransportCredentialOnly et None. Dans l’exemple de fichier App.config de service suivant, la définition du point de terminaison spécifie le basicHttpBinding et fait référence à une configuration de liaison nommée Binding1, comme illustré dans l’exemple de configuration suivant :
<system.serviceModel>
<services>
<service name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<!-- This endpoint is exposed at the base address provided by -->
<!-- host: http://localhost:8000/ServiceModelSamples/service.-->
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="Binding1"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services>
...
</system.serviceModel>
La configuration de liaison définit l’attribut mode de la <sécurité>Message et définit l’attribut clientCredentialType du <message>Certificate comme indiqué dans l’exemple de configuration suivant :
<bindings>
<basicHttpBinding>
<!--
This configuration defines the SecurityMode as Message and
the clientCredentialType as Certificate.
-->
<binding name="Binding1" >
<security mode = "Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
Le certificat que le service utilise pour s’authentifier auprès du client est défini dans la section comportements du fichier de configuration sous l’élément serviceCredentials . Le mode de validation qui s’applique au certificat utilisé par le client pour s’authentifier auprès du service est également défini dans la section comportements sous l’élément clientCertificate .
<!--For debugging purposes, set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
<serviceBehaviors>
<behavior name="CalculatorServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
<!--The serviceCredentials behavior allows one to define a -->
<!--service certificate. A service certificate is used by a -->
<!--client to authenticate the service and provide message -->
<!-- protection. This configuration references the "localhost"-->
<!--certificate installed during the setup instructions. -->
<serviceCredentials>
<serviceCertificate findValue="localhost"
storeLocation="LocalMachine"
storeName="My" x509FindType="FindBySubjectName" />
<clientCertificate>
<!-- Setting the certificateValidationMode to -->
<!-- PeerOrChainTrust means that if the certificate -->
<!--is in the user's Trusted People store, then it is -->
<!-- trusted without performing a validation of the -->
<!-- certificate's issuer chain. This setting is used -->
<!-- here for convenience so that the sample can be run -->
<!-- without having to have certificates issued by a -->
<!-- certification authority (CA). -->
<!-- This setting is less secure than the default, -->
<!-- ChainTrust. The security implications of this -->
<!-- setting should be carefully considered before using -->
<!-- PeerOrChainTrust in production code. -->
<authentication
certificateValidationMode="PeerOrChainTrust" />
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
Les mêmes détails de liaison et de sécurité sont spécifiés dans le fichier de configuration du client.
L’identité de l’appelant s’affiche dans la fenêtre de console de service à l’aide du code suivant :
Console.WriteLine("Called by {0}", ServiceSecurityContext.Current.PrimaryIdentity.Name);
Lorsque vous exécutez l’exemple, les demandes et réponses de l’opération s’affichent dans la fenêtre de la console cliente. Appuyez sur Entrée dans la fenêtre du client pour arrêter le client.
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
Pour configurer et compiler l’exemple
Assurez-vous d’avoir effectué la Procédure d’installation unique pour les exemples Windows Communication Foundation.
Pour générer l’édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Building the Windows Communication Foundation Samples.
Pour exécuter l’exemple sur le même ordinateur
Exécutez Setup.bat à partir de l’exemple de dossier d’installation. Cela installe tous les certificats requis pour l’exécution de l’exemple.
Remarque
Le fichier batch Setup.bat est conçu pour être exécuté à partir d’une invite de commandes du Kit de développement logiciel (SDK) Windows. Il nécessite que la variable d’environnement MSSDK pointe vers le répertoire où le KIT DE développement logiciel (SDK) est installé. Cette variable d’environnement est automatiquement définie dans une invite de commandes du Kit de développement logiciel (SDK) Windows.
Exécutez l’application de service à partir de \service\bin.
Exécutez l’application cliente à partir de \client\bin. L’activité du client s’affiche sur l’application console cliente.
Si le client et le service ne sont pas en mesure de communiquer, consultez Conseils de résolution des problèmes pour les exemples WCF.
Supprimez les certificats en exécutant Cleanup.bat une fois l’exemple terminé. D’autres exemples de sécurité utilisent les mêmes certificats.
Pour exécuter l’exemple sur plusieurs ordinateurs
Créez un répertoire sur l’ordinateur de service pour les fichiers binaires de service.
Copiez les fichiers de programme de service dans le répertoire de service sur le serveur. Copiez également les fichiers Setup.bat, Cleanup.batet ImportClientCert.bat sur le serveur.
Créez un répertoire sur l’ordinateur client pour les fichiers binaires clients.
Copiez les fichiers de programme client dans le répertoire client sur l’ordinateur client. Copiez également les fichiers Setup.bat, Cleanup.batet ImportServiceCert.bat sur le client.
Sur le serveur, exécutez
setup.bat service. L’exécutionsetup.batavec l’argumentservicecrée un certificat de service avec le nom de domaine complet de l’ordinateur et exporte le certificat de service vers un fichier nommé Service.cer.Modifiez Service.exe.config pour refléter le nouveau nom de certificat (dans l’attribut
findValuede l’élément <serviceCertificate> ) qui est identique au nom de domaine complet de l’ordinateur. Modifiez également la valeur de l’adresse de base pour spécifier un nom d’ordinateur complet au lieu de localhost.Copiez le fichier Service.cer du répertoire de service vers le répertoire client sur l’ordinateur client.
Sur le client, exécutez
setup.bat client. L’exécution desetup.batavec l’argumentclientcrée un certificat client nommé client.com et exporte le certificat client vers un fichier nommé Client.cer.Dans le fichier Client.exe.config sur l’ordinateur client, modifiez la valeur d’adresse du point de terminaison pour qu’il corresponde à la nouvelle adresse de votre service. Pour ce faire, remplacez localhost par le nom de domaine complet du serveur. Remplacez également l’attribut
findValuede defaultCertificate> par le nouveau nom de< certificat de service qui est le nom de domaine complet du serveur.Copiez le fichier Client.cer du répertoire client vers le répertoire de service sur le serveur.
Sur le client, exécutez ImportServiceCert.bat. Cela importe le certificat de service à partir du fichier Service.cer dans le magasin CurrentUser - TrustedPeople.
Sur le serveur, exécutez ImportClientCert.bat, cela importe le certificat client à partir du fichier Client.cer dans le magasin LocalMachine - TrustedPeople.
Sur l’ordinateur de service, exécutez-Service.exe à partir d’une invite de commandes.
Sur l’ordinateur client, lancez Client.exe à partir d’une fenêtre d’invite de commandes.
- Si le client et le service ne sont pas en mesure de communiquer, consultez Conseils de résolution des problèmes pour les exemples WCF.
Pour nettoyer après le test
Exécutez Cleanup.bat dans le dossier d’exemples une fois que vous avez terminé d’exécuter l’exemple.
Remarque
Ce script ne supprime pas les certificats de service sur un client lors de l’exécution de cet exemple sur plusieurs ordinateurs. Si vous avez exécuté des exemples Windows Communication Foundation (WCF) qui utilisent des certificats sur plusieurs ordinateurs, veillez à effacer les certificats de service installés dans le magasin CurrentUser - TrustedPeople. Pour ce faire, utilisez la commande suivante : Par exemple :
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com