Sécurité de message avec un client WindowsMessage Security with a Windows Client

Ce scénario montre un client Windows Communication Foundation (WCF) et le serveur sont sécurisés par mode de sécurité de message.This scenario shows a Windows Communication Foundation (WCF) client and server secured by message security mode. Le client et le service sont authentifiés à l'aide des informations d'identification Windows.The client and service are authenticated using Windows credentials.

Message de sécurité avec un client WindowsMessage security with a Windows client

CaractéristiqueCharacteristic DescriptionDescription
Mode de sécuritéSecurity Mode MessageMessage
InteropérabilitéInteroperability WCF uniquementWCF Only
Authentification (serveur)Authentication (Server) Authentification mutuelle du serveur et du clientMutual authentication of the server and client
Authentification (client)Authentication (Client) Authentification mutuelle du serveur et du clientMutual authentication of the server and client
IntégritéIntegrity Oui, à l'aide du contexte de sécurité partagéYes, using shared security context
ConfidentialitéConfidentiality Oui, à l'aide du contexte de sécurité partagéYes, using shared security context
TransportTransport NET.TCPNET.TCP
LiaisonBinding NetTcpBinding

ServiceService

La configuration et le code ci-dessous sont conçus pour s'exécuter indépendamment.The following code and configuration are meant to run independently. Effectuez l’une des opérations suivantes :Do one of the following:

  • Créez un service autonome à l'aide du code sans configuration.Create a stand-alone service using the code with no configuration.

  • Créez un service à l'aide de la configuration fournie, mais ne définissez pas de point de terminaison.Create a service using the supplied configuration, but do not define any endpoints.

CodeCode

Le code suivant indique comment créer un point de terminaison de service qui utilise la sécurité de message pour établir un contexte sécurisé lorsqu'un ordinateur sous Windows est utilisé.The following code shows how to create a service endpoint that uses message security to establish a secure context with a Windows machine.

// Create the binding.
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType =
    MessageCredentialType.Windows;

// Create the URI for the endpoint.
Uri netTcpUri = new Uri("net.tcp://localhost:8008/Calculator");

// Crate the service host and add an endpoint.
ServiceHost myServiceHost = new ServiceHost
    (typeof(Calculator), netTcpUri);
myServiceHost.AddServiceEndpoint(
    typeof(ICalculator), binding, "");

// Open the service. 
myServiceHost.Open();
Console.WriteLine("Listening ....");
Console.ReadLine();

// Close the service.
myServiceHost.Close();
' Create the binding.
Dim binding As New NetTcpBinding()
binding.Security.Mode = SecurityMode.Message
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows

' Create the URI for the endpoint.
Dim netTcpUri As New Uri("net.tcp://localhost:8008/Calculator")

' Crate the service host and add an endpoint.
Dim myServiceHost As New ServiceHost(GetType(ServiceModel.Calculator), netTcpUri)
myServiceHost.AddServiceEndpoint(GetType(ICalculator), binding, "")

' Open the service. 
myServiceHost.Open()
Console.WriteLine("Listening ....")
Console.ReadLine()

' Close the service.
myServiceHost.Close()

ConfigurationConfiguration

La configuration suivante peut être utilisée à la place du code pour paramétrer le service :The following configuration can be used instead of the code to set up the service:

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <system.serviceModel>  
    <services>  
      <service behaviorConfiguration=""  
               name="ServiceModel.Calculator">  
        <endpoint address="net.tcp://localhost:8008/Calculator"  
                  binding="netTcpBinding"  
                  bindingConfiguration="Windows"  
                  name="WindowsOverMessage"  
                  contract="ServiceModel.ICalculator" />  
      </service>  
    </services>  
    <bindings>  
      <netTcpBinding>  
        <binding name="Windows">  
          <security mode="Message">  
            <message clientCredentialType="Windows" />  
          </security>  
        </binding>  
      </netTcpBinding>  
    </bindings>  
    <client />  
  </system.serviceModel>  
</configuration>  

ClientClient

La configuration et le code ci-dessous sont conçus pour s'exécuter indépendamment.The following code and configuration are meant to run independently. Effectuez l’une des opérations suivantes :Do one of the following:

  • Créez un client autonome à l'aide du code (et du code client).Create a stand-alone client using the code (and client code).

  • Créez un client qui ne définit pas d'adresse de point de terminaison.Create a client that does not define any endpoint addresses. Au lieu de cela, utilisez le constructeur client qui accepte le nom de configuration comme argument.Instead, use the client constructor that takes the configuration name as an argument. Exemple :For example:

    CalculatorClient cc = new CalculatorClient("EndpointConfigurationName");
    
    Dim cc As New CalculatorClient("EndpointConfigurationName")
    

CodeCode

Le code suivant crée un client.The following code creates a client. La liaison est définie au mode de sécurité de niveau message et le type d’informations d’identification du client a la valeur Windows.The binding is to Message mode security, and the client credential type is set to Windows.

// Create the binding.
NetTcpBinding myBinding = new NetTcpBinding();
myBinding.Security.Mode = SecurityMode.Message;
myBinding.Security.Message.ClientCredentialType =
    MessageCredentialType.Windows;

// Create the endpoint address. 
EndpointAddress ea = new
    EndpointAddress("net.tcp://machineName:8008/Calculator");

// Create the client. 
CalculatorClient cc =
    new CalculatorClient(myBinding, ea);

// Begin using the client.
try
{
    cc.Open();
    Console.WriteLine(cc.Add(200, 1111));
    Console.ReadLine();

    // Close the client.
    cc.Close();
}
' Create the binding.
Dim myBinding As New NetTcpBinding()
myBinding.Security.Mode = SecurityMode.Message
myBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows

' Create the endpoint address. 
Dim ea As New EndpointAddress("net.tcp://machineName:8008/Calculator")

' Create the client. 
Dim cc As New CalculatorClient(myBinding, ea)

' Begin using the client.
Try
    cc.Open()

    Console.WriteLine(cc.Add(100, 11))
    Console.ReadLine()

    ' Close the client.
    cc.Close()
Catch tex As TimeoutException
    Console.WriteLine(tex.Message)
    cc.Abort()
Catch cex As CommunicationException
    Console.WriteLine(cex.Message)
    cc.Abort()
Finally
    Console.WriteLine("Closed the client")
    Console.ReadLine()
End Try

ConfigurationConfiguration

La configuration suivante est utilisée pour définir les propriétés du client.The following configuration is used to set the client properties.

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <system.serviceModel>  
    <bindings>  
      <netTcpBinding>  
        <binding name="NetTcpBinding_ICalculator" >  
         <security mode="Message">  
            <message clientCredentialType="Windows" />  
          </security>  
        </binding>  
      </netTcpBinding>  
    </bindings>  
    <client>  
      <endpoint address="net.tcp://machineName:8008/Calculator"   
                binding="netTcpBinding"  
                bindingConfiguration="NetTcpBinding_ICalculator"  
                contract="ICalculator"  
                name="NetTcpBinding_ICalculator">          
      </endpoint>  
    </client>  
  </system.serviceModel>  
</configuration>  

Voir aussiSee also