Partager via


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

Grâce à Windows Communication Foundation (WCF), le service peut spécifier comment un client est authentifié auprès du service. Par exemple, un service peut stipuler que le client soit authentifié avec un certificat.

Pour déterminer le type d'informations d'identification du client

  1. Récupérez les métadonnées à partir du point de terminaison des 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. L'une des manières permettant de récupérer des métadonnées consiste à utiliser l'outil Svcutil.exe pour retourner le code client et la configuration cliente. Pour plus d'informations, consultez Récupération de métadonnées et Outil Service Model Metadata Tool (Svcutil.exe).

  2. Ouvrez le fichier de configuration XML. Si vous utilisez l'outil Svcutil.exe, le nom par défaut du fichier est Output.config.

  3. Recherchez l'élément <sécurité> avec l'attribut mode (<mode de sécurité = MessageOrTransport**>** où MessageOrTransport est défini avec l'un des modes de sécurité.

  4. Recherchez l'élément enfant qui correspond à la valeur de mode. Par exemple, si le mode est défini sur Message, recherchez l'élément <message> contenu dans l'élément <sécurité>.

  5. 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 pour un client utilisant la sécurité du message et nécessitant un certificat pour authentifier 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 comme informations d'identification du client

Cet exemple définit le mode de sécurité sur le mode Transport et définit la valeur d'informations d'identification du client sur un certificat X.509. Les procédures suivantes montrent comment définir la valeur d'informations d'identification du client sur le client dans le code et dans la configuration. Elles supposent que vous avez utilisé l'Outil Service Model Metadata 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'Outil Service Model Metadata 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.

    ' 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 Try
    
    // 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();
    }          
    

    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 <clientCredentials> à 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 le sujet suivant 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>
    
  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="endpointCredentialBehavior" />
    </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
Outil Service Model Metadata Tool (Svcutil.exe)
Utilisation des certificats

Autres ressources

<netTcpBinding>
<security> of <netTcpBinding>
<message> element of <netTcpBinding>
<behavior> of <endpointBehaviors>
<behaviors>
<clientCertificate> of <serviceCredentials>
<clientCredentials>