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