Comparteix a través de


Cómo: 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 "solo transport-credential" que se encuentra en BasicHttpBindingy el modo "Ambos", que se encuentra en NetMsmqBinding. Sin embargo, este tema se centra en los tres modos de seguridad comunes: Transport, Messagey TransportWithMessageCredential.

Tenga en cuenta que no todos los enlaces predefinidos admiten todos estos modos. En este tema se establece el modo con las WSHttpBinding clases y NetTcpBinding y se muestra cómo establecer el modo mediante programación y a través de la configuración.

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

Para establecer el modo de seguridad en el código

  1. Cree una instancia de la clase de enlace que está usando. Para obtener una lista de enlaces predefinidos, consulte System-Provided Enlaces. En este ejemplo se crea una instancia de la WSHttpBinding clase .

  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
    

    Como 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 bien, establezca el modo para transportar 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 ClientCredentialType

Establecer el modo en uno de los tres valores determina cómo se establece la ClientCredentialType propiedad. Por ejemplo, utilizar la clase WSHttpBinding y establecer el modo en Transport significa 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 vínculo.

  2. Establezca la propiedad Mode en Transport.

  3. Establezca la ClientCredential propiedad en un valor adecuado. El código siguiente 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 de la vinculación.

  2. Establezca la propiedad Mode en Message.

  3. Establezca la ClientCredential propiedad en un valor adecuado. El código siguiente 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 configurar las propiedades Mode y ClientCredentialType en la configuración

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

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

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

  4. Si el modo se establece en Transport, agregue un elemento <transport> y establezca el atributo clientCredential en un valor adecuado.

    En el ejemplo siguiente se establece el modo en "Transport"y, a continuación, se establece el clientCredentialType atributo del <transport> elemento en "Windows".

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

    Como alternativa, establezca en security mode "Message", seguido de un elemento <"message">. En este ejemplo, se establece el clientCredentialType a "Certificate"".

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

    El uso del TransportWithMessageCredential valor es un caso especial y se explica a continuación.

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 usa capa de sockets seguros (SSL) a través de HTTP (HTTPS). Por lo tanto, se omite establecer la ClientCredentialType propiedad 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 vínculo WSHttpBinding, el objeto NonDualMessageSecurityOverHttp).

Para obtener más información, vea Cómo usar la seguridad de transporte y las credenciales de mensaje.

Consulte también