Compartir a través de


Seguridad de los mensajes con un cliente de nombres de usuario

La ilustración siguiente muestra un servicio y cliente de Windows Communication Foundation (WCF) protegidos mediante seguridad del nivel de mensaje. La autenticación del servicio se realiza mediante un certificado X.509. El cliente se autentica utilizando un nombre de usuario y contraseña.

Para obtener una aplicación de ejemplo, consulte Message Security User Name.

Seguridad de mensajes que utiliza la autenticación de nombre de usuario

Característica Descripción

Modo de seguridad

Mensaje

Interoperabilidad

Sólo Windows Communication Foundation (WCF)

Autenticación (servidor)

La negociación inicial requiere autenticación de servidor

Autenticación (cliente)

Nombre de usuario/contraseña

Integridad

Sí, mediante el contexto de seguridad compartido

Confidencialidad

Sí, mediante el contexto de seguridad compartido

Transporte

HTTP

Enlace

WSHttpBinding

Servicio

El código y la configuración siguientes están diseñados para ejecutarse de forma independiente. Siga uno de los procedimientos siguientes:

  • Cree un servicio independiente mediante el uso del código sin configuración.
  • Cree un servicio con la configuración proporcionada, pero sin definir ningún extremo.

Código

El código siguiente muestra cómo crear un extremo de servicio que utiliza la seguridad del mensaje.

Configuración

La siguiente configuración se puede usar en lugar del código.

<?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

Código

El siguiente código crea el cliente. El enlace es para la seguridad del modo de mensaje y el tipo de credencial de cliente está establecido en UserName. El nombre de usuario y la contraseña sólo se pueden especificar mediante código (no es configurable). El código para devolver el nombre de usuario y la contraseña no se muestra aquí porque se debe hacer en el nivel de la aplicación. Por ejemplo, utilice un cuadro de diálogo de Window Forms para solicitar los datos al usuario.

Configuración

El siguiente código configura el cliente. El enlace es para la seguridad del modo de mensaje y el tipo de credencial de cliente está establecido en UserName. El nombre de usuario y la contraseña sólo se pueden especificar mediante código (no es 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>

Consulte también

Conceptos

Información general sobre seguridad
Identidad del servicio y autenticación

Otros recursos

Message Security User Name
<identity>