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
Cree una instancia de la clase BindingElementCollection con el nombre
outputBec
.Llame al método estático M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), que devuelve una instancia de la clase SymmetricSecurityBindingElement.
Agregue el SymmetricSecurityBindingElement a la colección (
outputBec
) llamando a Add del método de la Collection de la clase BindingElement.Cree una instancia de la clase TextMessageEncodingBindingElement y agréguela a la colección (
outputBec
). Esto especifica la codificación utilizada por el enlace.Cree un HttpTransportBindingElement y agréguelo a la colección (
outputBec
). Esto especifica que el enlace utiliza el transporte HTTP.Cree un nuevo enlace personalizado creando una instancia de la clase CustomBinding y pasando la colección
outputBec
al constructor.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