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’aide de Windows Communication Foundation (WCF), le service peut spécifier la façon dont un client est authentifié auprès du service. Par exemple, un service peut stipuler que le client doit être authentifié avec un certificat.
Pour déterminer le type d’informations d’identification du client
Récupérez les métadonnées à partir du point de terminaison de métadonnées du service. Les métadonnées se composent généralement de deux fichiers : le code client dans le langage de programmation de votre choix (la valeur par défaut est Visual C#) et un fichier de configuration XML. Une façon de récupérer des métadonnées consiste à utiliser l’outil Svcutil.exe pour retourner le code client et la configuration du client. Pour plus d’informations, consultez Récupération des métadonnées et l'outil Utilitaire de métadonnées ServiceModel (Svcutil.exe).
Ouvrez le fichier de configuration XML. Si vous utilisez l’outil Svcutil.exe, le nom par défaut du fichier est Output.config.
Recherchez l’élément <de sécurité> avec l’attribut
mode(<mode de sécurité =MessageOrTransport> oùMessageOrTransportest défini sur l’un des modes de sécurité.Recherchez l’élément enfant qui correspond à la valeur du mode. Par exemple, si le mode est défini sur Message, recherchez l’élément <de message> contenu dans l’élément <de sécurité> .
Notez la valeur affectée à l’attribut
clientCredentialType. La valeur réelle dépend du mode utilisé, du transport ou du message.
Le code XML suivant montre la configuration d’un client à l’aide de la sécurité des messages et exige qu’un certificat authentifie le client.
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Certificate" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
Exemple : Mode de transport TCP avec certificat en tant qu’informations d’identification du client
Cet exemple montre comment définir le mode de sécurité en mode transport et définir la valeur d’informations d’identification du client sur un certificat X.509. Les procédures suivantes montrent comment définir la valeur des informations d’identification du client sur le client dans le code et la configuration. Cela suppose que vous avez utilisé l’outil Utilitaire de métadonnées ServiceModel (Svcutil.exe) pour renvoyer les métadonnées (code et configuration) à partir du service. Pour plus d’informations, consultez Guide pratique pour créer un client.
Pour spécifier la valeur des identifiants du client dans le code
Utilisez l’outil utilitaire de métadonnées ServiceModel (Svcutil.exe) pour générer du code et une configuration à partir du service.
Créez une instance du client WCF à l’aide du code généré.
Sur la classe cliente, définissez la ClientCredentials propriété de la ClientBase<TChannel> classe sur une valeur appropriée. Cet exemple montre comment définir la propriété sur un certificat X.509 à l’aide de la SetCertificate méthode de la X509CertificateInitiatorClientCredential classe.
// Create a binding using Transport and a certificate. NetTcpBinding b = new NetTcpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate; // Create an EndPointAddress. EndpointAddress ea = new EndpointAddress( "net.tcp://localHost:8036/Calculator/MyCalculator"); // Create the client. CalculatorClient cc = new CalculatorClient(b, ea); // Set the certificate for the client. cc.ClientCredentials.ClientCertificate.SetCertificate( StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cohowinery.com"); try { cc.Open(); // Begin using the client. Console.WriteLine(cc.Divide(1001, 2)); cc.Close(); } catch (AddressAccessDeniedException adExc) { Console.WriteLine(adExc.Message); Console.ReadLine(); } catch (System.Exception exc) { Console.WriteLine(exc.Message); Console.ReadLine(); }' Create a binding using Transport and a certificate. Dim b As New NetTcpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate ' Create an EndPointAddress. Dim ea As New EndpointAddress("net.tcp://localHost:8036/Calculator/MyCalculator") ' Create the client. Dim cc As New CalculatorClient(b, ea) ' Set the certificate for the client. cc.ClientCredentials.ClientCertificate.SetCertificate( _ StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "cohowinery.com") Try cc.Open() ' Begin using the client. Console.WriteLine(cc.Divide(1001, 2)) cc.Close() Catch adExc As AddressAccessDeniedException Console.WriteLine(adExc.Message) Console.ReadLine() Catch exc As System.Exception Console.WriteLine(exc.Message) Console.ReadLine() End TryVous pouvez utiliser l’une des énumérations de la X509FindType classe. Le nom du sujet est utilisé ici au cas où le certificat serait modifié (en raison d’une date d’expiration). L’utilisation du nom de l’objet permet à l’infrastructure de rechercher à nouveau le certificat.
Pour spécifier la valeur d’informations d’identification du client dans la configuration du client
Ajoutez un <élément de comportement> à l’élément <comportements> .
Ajoutez un élément <clientCredentials> à l’élément <behaviors>. Veillez à définir l’attribut requis
namesur une valeur appropriée.Ajoutez un <élément clientCertificate> à l’élément <clientCredentials> .
Définissez les attributs suivants sur les valeurs appropriées :
storeLocation,storeName,x509FindTypeetfindValue, comme indiqué dans le code suivant. Pour plus d’informations sur les certificats, consultez Utilisation des certificats.<behaviors> <endpointBehaviors> <behavior name="endpointCredentialBehavior"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>Lors de la configuration du client, spécifiez le comportement en définissant l’attribut
behaviorConfigurationde l’élément<endpoint>, comme indiqué dans le code suivant. L’élément de point de terminaison est un enfant de l’élément <client> . Spécifiez également le nom de la configuration de liaison en définissant l’attributbindingConfigurationsur la liaison pour le client. Si vous utilisez un fichier de configuration généré, le nom de la liaison est généré automatiquement. Dans cet exemple, le nom est"tcpBindingWithCredential".<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="endpointCredentialBehavior" /> </client>
Voir aussi
- NetTcpBinding
- SetCertificate
- X509CertificateRecipientServiceCredential
- ClientBase<TChannel>
- X509CertificateInitiatorClientCredential
- Programmation de la sécurité WCF
- Sélection d’un type d’informations d’identification
- Outil utilitaire de métadonnées ServiceModel (Svcutil.exe)
- Utilisation de certificats
- Guide pratique pour créer un client
- <netTcpBinding>
- <sécurité>
- <Message>
- <comportement>
- <Comportements>
- <clientCertificate>
- <clientCredentials>