Procédure : créer une liaison personnalisée à l’aide de SecurityBindingElement

Windows Communication Foundation (WCF) contient plusieurs liaisons fournies par le système qui peuvent être configurées mais qui n’offrent pas une souplesse complète lors de la configuration de toutes les options de sécurité prises en charge par WCF. Cette rubrique montre comment créer une liaison personnalisée directement à partir d'éléments de liaison individuels et met en évidence certains des paramètres de sécurité qui peuvent être spécifiés lors de la création d'une liaison de ce type. Pour plus d’informations sur la création de liaisons personnalisées, consultez Extension de liaisons.

Avertissement

SecurityBindingElement ne prend pas en charge la forme de canal IDuplexSessionChannel, qui est la forme de canal par défaut utilisée par le transport TCP lorsque TransferMode a la valeur Buffered. Vous devez définir TransferMode à Streamed pour utiliser SecurityBindingElement dans ce scénario.

Création d’une liaison personnalisée

Dans WCF, toutes les liaisons sont composées d’éléments de liaison. Chaque élément de liaison dérive de la classe BindingElement. Pour les liaisons fournies par le système standard, les éléments de liaison sont créés et configurés automatiquement, bien que vous puissiez personnaliser quelques paramètres de propriétés.

En revanche, pour créer une liaison personnalisée, les éléments de liaison sont créés et configurés, puis une CustomBinding est créée à partir des éléments de liaison.

Pour ce faire, vous ajoutez les éléments de liaison individuels à une collection représentée par une instance de la classe BindingElementCollection, puis vous affectez à la propriété Elements de CustomBinding une valeur égale à cet objet. Vous devez ajouter les éléments de liaison dans l'ordre suivant : flux de transaction, session fiable, sécurité, duplex composite, unidirectionnel, sécurité de flux de données, encodage de message et transport. Notez que les éléments de liaison répertoriés ne sont pas tous requis dans chaque liaison.

SecurityBindingElement

Trois éléments de liaison concernent la sécurité au niveau des messages et tous sont dérivés de la classe SecurityBindingElement. Il s'agit de TransportSecurityBindingElement, SymmetricSecurityBindingElement et AsymmetricSecurityBindingElement. Le TransportSecurityBindingElement est utilisé pour assurer une sécurité en mode mixte. Les deux autres éléments sont utilisés lorsque la couche message fournit la sécurité.

D'autres classes sont utilisées lorsque la sécurité au niveau du transport est assurée :

Éléments de liaison requis

Un grand nombre d’éléments de liaison peuvent être combinés dans une liaison. Toutes les combinaisons ne sont pas valides. Cette section décrit les éléments requis qui doivent être présents dans une liaison de sécurité.

Les liaisons de sécurité valides dépendent de nombreux facteurs, notamment :

  • Mode de sécurité

  • Protocole de transport

  • Modèle d’échange de messages (MEP) spécifié dans le contrat

Le tableau suivant indique les configurations des piles d’éléments de liaison valides pour chaque combinaison des facteurs précédents. Notez qu’il s’agit d’exigences minimales. Vous pouvez ajouter d'autres éléments de liaison à la liaison, notamment des éléments de liaison d'encodage de message et de transaction.

Mode de sécurité Transport Contracter le modèle d'échange de messages Contracter le modèle d'échange de messages Contracter le modèle d'échange de messages
Datagram Request Reply Duplex
Transport Https
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP
OneWayBindingElement
StreamSecurityBindingElement de SSL ou Windows StreamSecurityBindingElement de SSL ou Windows StreamSecurityBindingElement de SSL ou Windows
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Message Http SymmetricSecurityBindingElement SymmetricSecurityBindingElement SymmetricSecurityBindingElement (mode d'authentification = SecureConversation)
CompositeDuplexBindingElement
OneWayBindingElement OneWayBindingElement
HttpTransportBindingElement HttpTransportBindingElement HttpTransportBindingElement
TCP SecurityBindingElement SecurityBindingElement SymmetricSecurityBindingElement (mode d'authentification = SecureConversation)
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Mixte (transport avec informations d'identification de message) Https TransportSecurityBindingElement TransportSecurityBindingElement
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP TransportSecurityBindingElement SymmetricSecurityBindingElement (mode d'authentification = SecureConversation) SymmetricSecurityBindingElement (mode d'authentification = SecureConversation)
OneWayBindingElement
StreamSecurityBindingElement de SSL ou Windows StreamSecurityBindingElement de SSL ou Windows StreamSecurityBindingElement de SSL ou Windows
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement

Notez qu'il existe de nombreux paramètres configurables sur SecurityBindingElements. Pour plus d’informations, consultez Modes d’authentification SecurityBindingElement.

Pour plus d’informations, consultez Conversations sécurisées et sessions sécurisées.

Procédures

Pour créer une liaison personnalisée qui utilise SymmetricSecurityBindingElement

  1. Créez une instance de la classe BindingElementCollection portant le nom outputBec.

  2. Appelez la méthode statique M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), qui retourne une instance de la classe SymmetricSecurityBindingElement.

  3. Ajoutez SymmetricSecurityBindingElement à la collection (outputBec) en appelant la méthode Add de Collection<T> de la classe BindingElement.

  4. Créez une instance de la classe TextMessageEncodingBindingElement et ajoutez-la à la collection (outputBec). Cela spécifie l’encodage utilisé par la liaison.

  5. Créez un HttpTransportBindingElement et ajoutez-le à la collection outputBec. Cela indique que la liaison utilise le transport HTTP.

  6. Créez une liaison personnalisée en créant une instance de la classe CustomBinding et en passant la collection outputBec au constructeur.

  7. La liaison personnalisée résultante partage un grand nombre des caractéristiques de WSHttpBinding. Elle spécifie la sécurité au niveau du message et les informations d'identification Windows, mais désactive les sessions sécurisées, requiert que les informations d'identification du service soient spécifiées hors bande, et ne chiffre pas de signature. La dernière ne peut être contrôlée que par la définition de la propriété MessageProtectionOrder, tel qu'indiqué à l'étape 4. Les deux autres peuvent être contrôlées à l'aide de paramètres sur la liaison standard.

Exemple

Description

L'exemple suivant fournit une fonction complète permettant de créer une liaison personnalisée qui utilise SymmetricSecurityBindingElement.

Code

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

Voir aussi