Partager via


Sécurité de message avec un client de type Nom d'utilisateur

L'illustration suivante présente un service Windows Communication Foundation (WCF) et le client sécurisé à l'aide de la sécurité au niveau du message. Le service est authentifié à l'aide d'un certificat X.509. Le client s'authentifie à l'aide d'un nom d'utilisateur et d'un mot de passe.

Pour obtenir un exemple d'application, consultez Message Security User Name.

Sécurité de message utilisant l'authentification par nom d'utilisateur

Caractéristique Description

Mode de sécurité

Message

Interopérabilité

Windows Communication Foundation (WCF) uniquement

Authentification (serveur)

La négociation initiale requiert l'authentification du serveur

Authentification (client)

Nom d'utilisateur/mot de passe

Intégrité

Oui, à l'aide du contexte de sécurité partagé

Confidentialité

Oui, à l'aide du contexte de sécurité partagé

Transport

HTTP

Liaison

WSHttpBinding

Service

La configuration et le code suivants sont destinés à s'exécuter indépendamment. Effectuez l'une des opérations suivantes :

  • Créez un service autonome à l'aide du code, sans utiliser la configuration.
  • Créez un service à l'aide de la configuration fournie, mais ne définissez pas de point de terminaison.

Code

Le code suivant indique comment créer un point de terminaison de service qui utilise la sécurité de message.

Configuration

La configuration suivante peut être utilisée à la place du code :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceCredentialsBehavior">
          <serviceCredentials>
            <serviceCertificate findValue="Contoso.com" 
                                storeLocation="LocalMachine"
                                storeName="My"   
                                x509FindType="FindBySubjectName" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="ServiceCredentialsBehavior"
               name="ServiceModel.Calculator">
        <endpoint address="https://localhost/Calculator"
                  binding="wsHttpBinding"
                  bindingConfiguration="MessageAndUserName"
                  name="SecuredByTransportEndpoint"
                  contract="ServiceModel.ICalculator" />
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="MessageAndUserName">
          <security mode="Message">            
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client />
  </system.serviceModel>
</configuration>

Client

Code

Le code suivant crée le client. La liaison est définie au mode de sécurité au niveau du message, et le type d'informations d'identification du client a la valeur UserName. Le nom d'utilisateur et le mot de passe peuvent uniquement être spécifiés à l'aide du code (cela n'est pas configurable). Le code permettant de retourner le nom d'utilisateur et le mot de passe n'est pas indiqué dans ce cas car il doit être exécuté au niveau de l'application. Par exemple, utilisez une boîte de dialogue Windows Forms pour demander les données à l'utilisateur.

Configuration

Le code suivant configure le client. La liaison est définie au mode de sécurité au niveau du message, et le type d'informations d'identification du client a la valeur UserName. Le nom d'utilisateur et le mot de passe peuvent uniquement être spécifiés à l'aide du code (cela n'est pas configurable).

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator" >
          <security mode="Message">
            <message clientCredentialType="UserName" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://machineName/Calculator" 
                binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_ICalculator" 
                contract="ICalculator"
                name="WSHttpBinding_ICalculator">
        <identity>
          <dns value ="Contoso.com" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

Voir aussi

Concepts

Vue d'ensemble de la sécurité
Identité du service et authentification

Autres ressources

Message Security User Name
<identity>