Procedimiento para establecer el modo de seguridad

La seguridad de Windows Communication Foundation (WCF) tiene tres modos de seguridad comunes que se encuentran en la mayoría de los enlaces predefinidos: transporte, mensaje y "transporte con credencial de mensaje". Dos modos adicionales son específicos de dos enlaces: el modo "transport-credential only" que se encuentra en BasicHttpBinding y el modo "Both", que se encuentra en NetMsmqBinding. Sin embargo, este tema se concentra en los tres modos de seguridad comunes: Transport, Messagey TransportWithMessageCredential.

Tenga en cuenta que no todos los enlaces predefinidos admiten todos estos modos. Este tema establece el modo con las clases WSHttpBinding y NetTcpBinding y muestra cómo establecer el modo mediante programación y configuración.

Para obtener más información, consulte Seguridad WCF, Información general sobre seguridad, Servicios de seguridad y Servicios de seguridad y clientes. Para obtener más información sobre el modo de transporte y el mensaje, consulte Seguridad de transporte y Seguridad de mensajes.

Para establecer el modo de seguridad en código

  1. Cree una instancia de la clase del enlace que está utilizando. Para obtener una lista de enlaces predefinidos, consulte Enlaces que proporciona el sistema. En el siguiente ejemplo se crea una instancia de la clase WSHttpBinding.

  2. Establezca la propiedad Mode del objeto devuelto por la propiedad Security.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    

    De manera alternativa, establezca el modo en mensaje, como se muestra en el código siguiente.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    

    O establezca el modo en transporte con credenciales de mensaje, como se muestra en el código siguiente.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.TransportWithMessageCredential
    
  3. También puede establecer el modo en el constructor del enlace, como se muestra en el código siguiente.

    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    
    Dim b As New WSHttpBinding(SecurityMode.Message)
    

Establecimiento de la propiedad la propiedad ClientCredentialType

El establecimiento del modo en uno de los tres valores determina cómo establece la propiedad ClientCredentialType. Por ejemplo, el uso de la clase WSHttpBinding, estableciendo el modo en Transport implica que debe establecer la propiedad ClientCredentialType de la clase HttpTransportSecurity en un valor adecuado.

Para establecer la propiedad ClientCredentialType para el modo de transporte

  1. Cree una instancia del enlace.

  2. Establezca la propiedad Mode en Transport.

  3. Establezca la propiedad ClientCredential en un valor apropiado. El siguiente código establece la propiedad en Windows:

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
    

Para establecer la propiedad ClientCredentialType para el modo de mensaje

  1. Cree una instancia del enlace.

  2. Establezca la propiedad Mode en Message.

  3. Establezca la propiedad ClientCredential en un valor apropiado. El siguiente código establece la propiedad en Certificate:

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    

Para establecer el Modo y la propiedad ClientCredentialType en configuración

  1. Agregue un elemento de enlace apropiado al elemento de <enlaces> del archivo de configuración. En el ejemplo siguiente se agrega un elemento <wsHttpBinding>.

  2. Agregue un elemento <binding> y establezca el atributo name en un valor adecuado.

  3. Agregue un elemento <security> y establezca el atributo mode en Message, Transport o TransportWithMessageCredential.

  4. Si se establece el modo en Transport, agregue un elemento <transport> en un valor apropiado.

    El siguiente ejemplo establece el modo en “Transport", y, a continuación, establece el atributo clientCredentialType del <transport>.

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" >
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    De manera alternativa, establezca el security mode en "Message", seguido por un elemento <"message">. Este ejemplo establece el clientCredentialType en "Certificate".

    <wsHttpBinding>
    <binding name="MessageSecurity">
        <security mode="Message" >
           <message clientCredentialType = "Certificate" />
        </security>
    </binding>
    </wsHttpBinding >
    

    Utilizar el valor TransportWithMessageCredential es un caso especial y se explica más adelante.

Uso de TransportWithMessageCredential

Al establecer el modo de seguridad en TransportWithMessageCredential, el transporte determina el mecanismo real que proporciona la seguridad de nivel de transporte. Por ejemplo, el protocolo HTTP utiliza Secure Sockets Layer (SSL) sobre HTTP (HTTPS). Por consiguiente, se omite el establecimiento de la propiedad ClientCredentialType de cualquier objeto de seguridad de transporte (como HttpTransportSecurity). En otras palabras, solo puede establecer el ClientCredentialType del objeto de seguridad del mensaje (para el enlace WSHttpBinding, el objeto NonDualMessageSecurityOverHttp).

Para obtener más información, consulte Procedimiento para usar credenciales de mensaje y seguridad de transporte.

Consulte también