Compartir a través de


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.

Seguridad de mensajes con clientes anónimos

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

Otros recursos

Message Security Anonymous