Partager via


Comment : spécifier des valeurs d'informations d'identification du client

Windows Communication Foundation (WCF) vous permet de spécifier comment un client est authentifié auprès du service. Par exemple, vous pouvez stipuler que le client soit authentifié auprès du service avec un certificat. Cet exemple définit le mode de sécurité à Transport et définit le type d'informations d'identification du client à Certificat.

Le processus est divisé en trois phases :

  1. Le développeur de service spécifie le type d'informations d'identification que le client doit fournir.
  2. Le développeur de client utilise l'ServiceModel Metadata Utility Tool (Svcutil.exe) pour interroger le service afin d'obtenir ses métadonnées (code client de service et fichier de configuration).
  3. Le développeur de client crée l'application cliente et fournit une valeur d'informations d'identification, dans le code ou la configuration, qui correspond au type d'informations d'identification, comme stipulé dans les métadonnées.

Code de service

Pour spécifier le type d'information d'identification du client sur le service dans le code

  1. Ajoutez les références suivantes à votre code.

  2. Créez une instance d'une liaison. Cet exemple utilise NetTcpBinding.

  3. Définissez le mode de sécurité selon les besoins. Cette exemple active le mode Transport.

  4. Affectez au ClientCredentialType une information d'identification comme il convient. Cet exemple définit comme type un certificat.

  5. Créez une instance du ServiceHost à l'aide de votre type de service dans le constructeur. Pour des raisons de simplicité, le code permettant d'afficher l'interface de service et son implémentation n'est pas affiché ici.

  6. Définissez la valeur d'information d'identification pour le service. Cet exemple utilise la méthode SetCertificate de la classe X509CertificateRecipientServiceCredential.

Pour spécifier le type d'information d'identification du client sur le service dans la configuration

  1. Ajoutez une liaison appropriée à l'élément <bindings>. Cet exemple utilise le <netTcpBinding Element>.

  2. Ajoutez un <security> of <netTcpBinding> à la liaison. Assurez-vous d'affecter à l'attribut name requis une valeur appropriée.

  3. Affectez une valeur appropriée à l'attribut mode. Cet exemple utilise le mode "Message".

  4. Ajoutez un élément de message ou de transport, le cas échéant, à la liaison de sécurité. Cet exemple utilise le <message> element of <netTcpBinding>.

  5. Affectez à l'attribut clientCredential le type d'information d'identification souhaité. Cet exemple utilise "Certificate".

    <bindings>
      <netTcpBinding>
        <binding name="TcpBindingWithCredential">
          <security mode="Message">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    
  6. Lorsque vous créez l'élément de point de terminaison, utilisez la valeur de l'attribut bindingConfiguration pour spécifier la configuration de liaison, comme illustré dans le code suivant.

    <endpoint address="myEndpointAddress"
              binding="netTcpBinding"
              bindingConfiguration="TcpBindingWithCredential"
                 name="netTcpBinding_ICalculator"
              contract="Microsoft.ServiceModel.Samples.ICalculator" />
    

Code client

Les procédures suivantes montrent comment définir la valeur d'information d'identification du client sur le client dans le code et dans la configuration. Elles supposent que vous avez utilisé l'ServiceModel Metadata Utility Tool (Svcutil.exe) pour retourner les métadonnées (code et configuration) du service. Pour plus d'informations, consultez Comment : créer un client Windows Communication Foundation.

Pour spécifier la valeur d'information d'identification du client sur le client dans le code

  1. Utilisez l'ServiceModel Metadata Utility Tool (Svcutil.exe) pour générer le code et la configuration à partir du service.

  2. Créez une instance du client WCF à l'aide du code généré.

  3. Sur la classe de client, affectez à la propriété ClientCredentials de la classe ClientBase une valeur appropriée. Cet exemple affecte à la propriété un certificat X.509 à l'aide de la méthode SetCertificate de la classe X509CertificateInitiatorClientCredential.

    Vous pouvez utiliser n'importe lesquelles des énumérations de la classe X509FindType. 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 du sujet permet à l'infrastructure de retrouver le certificat.

Pour spécifier la valeur d'information d'identification du client sur le client dans la configuration

  1. Ajoutez un élément <behavior> of <endpointBehaviors> à l'élément <behaviors>.

  2. Ajoutez un élément <serviceCredentials> à l'élément <behaviors>. Assurez-vous d'affecter à l'attribut name requis une valeur appropriée.

  3. Ajoutez un élément <clientCertificate> of <serviceCredentials> à l'élément <clientCredentials>.

  4. Affectez aux attributs suivants des valeurs appropriées : storeLocation, storeName, x509FindType et findValue, comme illustré dans le code suivant. Pour plus d'informations sur les certificats, consultez Utilisation des certificats.

    <behaviors>
       <endpointBehaviors>
          <behavior name="endpointCredential">
            <clientCredentials>
              <clientCertificate findValue="Contoso.com" 
                                 storeLocation="LocalMachine"
                                 storeName="TrustedPeople"
                                 x509FindType="FindBySubjectName" />
            </clientCredentials>
          </behavior>
       </endpointBehaviors>
    </behaviors>
    
  5. Lorsque vous configurez le client, spécifiez le comportement en définissant l'attribut behaviorConfiguration de l'élément <endpoint>, comme illustré 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 affectant à l'attribut bindingConfiguration 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="credentialBehavior" />
    </client>
    

Voir aussi

Tâches

Comment : créer un client Windows Communication Foundation

Référence

NetTcpBinding
SetCertificate
X509CertificateRecipientServiceCredential
ClientBase
X509CertificateInitiatorClientCredential

Concepts

Programmation de la sécurité dans WCF
Sélection d'un type d'informations d'identification
Utilisation des certificats

Autres ressources

ServiceModel Metadata Utility Tool (Svcutil.exe)
<netTcpBinding>
<security> of <netTcpBinding>
<message> element of <netTcpBinding>
<behavior> of <endpointBehaviors>
<behaviors>
<clientCertificate> of <serviceCredentials>
<clientCredentials>