Compartir a través de


Cómo: Crear un enlace personalizado mediante SecurityBindingElement

Windows Communication Foundation (WCF) incluye varios enlaces proporcionados por el sistema que se pueden configurar pero que no proporcionan completa flexibilidad cuando se configuran todas las opciones de seguridad que WCF admite. Este tema muestra cómo crear un enlace personalizado directamente a partir de elementos de enlace individuales y resalta algunos de los ajustes de seguridad que pueden especificarse al crear este tipo de enlaces. Para obtener más información sobre creación de enlaces personalizados, vea Extensión de enlaces.

Creación de un enlace personalizado

En WCF todos los enlaces se componen de elementos de enlace. Cada elemento de enlace deriva de la clase BindingElement. En el caso de los enlaces estándar proporcionados por el sistema, los elementos de enlace se crean y se configuran automáticamente, pero se pueden personalizar algunos de los valores de las propiedades.

Por el contrario, para crear un enlace personalizado, se crean y configuran los elementos de enlace y se crea un objeto CustomBinding a partir de los elementos de enlace.

Para ello, se agregan los elementos de enlace individuales a una colección representada por una instancia de la clase BindingElementCollection y, a continuación, se establece la propiedad Elements de CustomBinding en ese objeto. Debe agregar los elementos de enlace en el orden siguiente: flujo de transacciones, sesión confiable, seguridad, dúplex compuesto, unidireccional, seguridad de secuencia, codificación de mensajes y transporte. Tenga en cuenta que no todos los elementos de enlace enumerados se necesitan en cada enlace.

SecurityBindingElement

Tres elementos de enlace guardan relación con la seguridad, y todos se derivan de la clase SecurityBindingElement. Los tres elementos son TransportSecurityBindingElement, SymmetricSecurityBindingElement y AsymmetricSecurityBindingElement. TransportSecurityBindingElement se utiliza para proporcionar seguridad de modo mixto. Se utilizan los otros dos elementos cuando la capa del mensaje proporciona seguridad.

Se utilizan clases adicionales cuando se proporciona seguridad de nivel de transporte:

Elementos de enlace necesarios

Hay un gran número de posibles elementos de enlace que se pueden combinar en un enlace. No todas estas combinaciones son válidas. En esta sección se describen los elementos necesarios que se deben encontrar en un enlace de seguridad.

La validez de los enlaces de seguridad depende de muchos factores, como los siguientes:

  • Modo de seguridad.

  • Protocolo de transporte.

  • El modelo de intercambio de mensajes (MEP) especificado en el contrato.

En la tabla siguiente se muestran las configuraciones de pila de los elementos de enlace válidos para cada combinación de los factores mencionados. Tenga en cuenta que éstos son los requisitos mínimos. Puede agregar otros elementos de enlace al enlace, como elementos de enlace de codificación de mensajes y elementos de enlace de transacción.

Modo de seguridad Transporte Modelo de intercambio de mensajes de contrato

Datagram

Request Reply

Duplex

Transporte

Https

OneWayBindingElement

HttpsTransportBindingElement

HttpsTransportBindingElement

TCP

OneWayBindingElement

SSL o StreamSecurityBindingElement de Windows

SSL o StreamSecurityBindingElement de Windows

SSL o StreamSecurityBindingElement de Windows

TcpTransportBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

Mensaje

Http

SymmetricSecurityBindingElement

SymmetricSecurityBindingElement

SymmetricSecurityBindingElement (modo de autenticación = SecureConversation)

CompositeDuplexBindingElement

OneWayBindingElement

OneWayBindingElement

HttpTransportBindingElement

HttpTransportBindingElement

HttpTransportBindingElement

Tcp

SecurityBindingElement

SecurityBindingElement

SymmetricSecurityBindingElement (modo de autenticación = SecureConversation)

TcpTransportBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

Mixto (transporte con credenciales de mensaje)

Https

TransportSecurityBindingElement

TransportSecurityBindingElement

OneWayBindingElement

HttpsTransportBindingElement

HttpsTransportBindingElement

TCP

TransportSecurityBindingElement

SymmetricSecurityBindingElement (modo de autenticación = SecureConversation)

SymmetricSecurityBindingElement (modo de autenticación = SecureConversation)

OneWayBindingElement

SSL o StreamSecurityBindingElement de Windows

SSL o StreamSecurityBindingElement de Windows

SSL o StreamSecurityBindingElement de Windows

TcpTransportBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

Observe que hay muchos valores de configuración que se pueden definir en SecurityBindingElements. Para obtener más información, vea Modos de autenticación de SecurityBindingElement.

Para obtener más información, vea Conversaciones y sesiones seguras.

Procedimientos

Para crear un enlace personalizado que utilice un SymmetricSecurityBindingElement

  1. Cree una instancia de la clase BindingElementCollection con el nombre outputBec.

  2. Llame al método estático M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), que devuelve una instancia de la clase SymmetricSecurityBindingElement.

  3. Agregue el SymmetricSecurityBindingElement a la colección (outputBec) llamando a Add del método de la Collection de la clase BindingElement.

  4. Cree una instancia de la clase TextMessageEncodingBindingElement y agréguela a la colección (outputBec). Esto especifica la codificación utilizada por el enlace.

  5. Cree un HttpTransportBindingElement y agréguelo a la colección (outputBec). Esto especifica que el enlace utiliza el transporte HTTP.

  6. Cree un nuevo enlace personalizado creando una instancia de la clase CustomBinding y pasando la colección outputBec al constructor.

  7. El enlace personalizado resultante comparte muchas de las mismas características que el WSHttpBinding estándar. Especifica seguridad del nivel de mensaje y credenciales de Windows pero deshabilita las sesiones seguras, requiere que la credencial del servicio se especifique fuera de banda, y no cifra las firmas. Lo último solo puede controlarse estableciendo la propiedad MessageProtectionOrder como se muestra en el paso 4. Los otros dos se pueden controlar usando los valores del enlace estándar.

Ejemplo

Descripción

El ejemplo siguiente proporciona una función completa para crear un enlace personalizado que utilice SymmetricSecurityBindingElement.

Código

Public Shared Function CreateCustomBinding() As Binding
    ' Create an empty Custom Binding to populate, 
    Dim binding As New CustomBinding()
    ' Create a SymmetricSecurityBindingElement.
    Dim ssbe As SymmetricSecurityBindingElement
    ssbe = SecurityBindingElement.CreateSspiNegotiationBindingElement(True)
    ' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    binding.Elements.Add(ssbe)
    binding.Elements.Add(New TextMessageEncodingBindingElement())
    binding.Elements.Add(New HttpTransportBindingElement())
    Return New CustomBinding(binding)

End Function
// Create an empty CustomBinding to populate
CustomBinding binding = new CustomBinding();
// Create a SymmetricSecurityBindingElement.
SymmetricSecurityBindingElement ssbe =
    SecurityBindingElement.CreateSspiNegotiationBindingElement(true);
// Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe);
binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpTransportBindingElement());
return new CustomBinding(binding);

Vea también

Referencia

SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding

Conceptos

Enlaces proporcionados por el sistema

Otros recursos

Extensión de enlaces