Procedimiento para 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 una flexibilidad completa cuando se configuran todas las opciones de seguridad que admite WCF. 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 más información sobre la creación de enlaces personalizados, consulte Enlaces personalizados.

Advertencia

SecurityBindingElement no admite la forma de canal de IDuplexSessionChannel, que es el uso predeterminado de la forma de canal por el transporte TCP cuando TransferMode se establece en Buffered. Debe establecer TransferMode en Streamed para usar SecurityBindingElement en este escenario.

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 patrón 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 Patrón de intercambio de mensajes de contrato Patrón de intercambio de mensajes de contrato Patrón 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
Message 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 más información, consulte Modos de autenticación de SecurityBindingElement.

Para más información, consulte 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<T> 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

// 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);
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

Consulte también