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
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.
Establezca la propiedad
Mode
del objeto devuelto por la propiedadSecurity
.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
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
Cree una instancia del enlace.
Establezca la propiedad
Mode
enTransport
.Establezca la propiedad
ClientCredential
en un valor apropiado. El siguiente código establece la propiedad enWindows
: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
Cree una instancia del enlace.
Establezca la propiedad
Mode
enMessage
.Establezca la propiedad
ClientCredential
en un valor apropiado. El siguiente código establece la propiedad enCertificate
: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
Agregue un elemento de enlace apropiado al elemento de <enlaces> del archivo de configuración. En el ejemplo siguiente se agrega un elemento <wsHttpBinding>.
Agregue un elemento
<binding>
y establezca el atributoname
en un valor adecuado.Agregue un elemento
<security>
y establezca el atributomode
enMessage
,Transport
oTransportWithMessageCredential
.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 atributoclientCredentialType
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 elclientCredentialType
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.