Seguridad de mensajes con clientes anónimos
El escenario siguiente muestra un cliente y el servicio protegido por la seguridad del mensaje Windows Communication Foundation (WCF). Un objetivo del diseño es utilizar la seguridad del mensaje en lugar de la seguridad de transporte, para que en el futuro pueda admitir un modelo basado en notificaciones más completo. Para obtener más información acerca de utilizar notificaciones más completas para la autorización, consulte Administración de notificaciones y autorización con el modelo de identidad.
Para obtener una aplicación de ejemplo, consulte Message Security Anonymous.
Característica | Descripción |
---|---|
Modo de seguridad |
Mensaje |
Interoperabilidad |
Sólo WCF |
Autenticación (servidor) |
La negociación inicial requiere la autenticación del servidor, pero no la autenticación del cliente |
Autenticación (cliente) |
Ninguno |
Integridad |
Sí, mediante el contexto de seguridad compartido |
Confidencialidad |
Sí, mediante el contexto de seguridad compartido |
Transporte |
HTTP |
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
En lugar del código, se puede utilizar la siguiente configuración. El elemento de comportamiento del servicio se utiliza para especificar un certificado utilizado para autenticar el servicio al cliente. El elemento de servicio debe especificar el comportamiento mediante el atributo behaviorConfiguration. El elemento de enlace especifica que el tipo de credencial de cliente es None, de modo que permite a los clientes anónimos utilizar el servicio.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceCredentialsBehavior">
<serviceCredentials>
<serviceCertificate findValue="contoso.com"
storeLocation="LocalMachine"
storeName="My" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceCredentialsBehavior"
name="ServiceModel.Calculator">
<endpoint address="https://localhost/Calculator"
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_ICalculator"
name="CalculatorService"
contract="ServiceModel.ICalculator" />
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ICalculator" >
<security mode="Message">
<message clientCredentialType="None" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client />
</system.serviceModel>
</configuration>
Cliente
El código y la configuración siguientes están diseñados para ejecutarse de manera independiente. Realice uno de los procedimientos siguientes:
- Cree un cliente independiente mediante el código (y el código de cliente).
- Cree un cliente que no defina direcciones de extremo. En su lugar, utilice el constructor de cliente que adopta el nombre de configuración como un argumento. Por ejemplo:
Código
En el ejemplo de código siguiente se crea una instancia de cliente. El enlace utiliza seguridad en modo de mensaje y el tipo de credencial de cliente está establecido como ninguno.
Configuración
El siguiente código configura el cliente.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ICalculator" >
<security mode="Message">
<message clientCredentialType="None" />
</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
Seguridad distribuida de aplicaciones
Identidad del servicio y autenticación