Partager via


Comment : 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 le sujet suivant la création de liaisons personnalisées, consultez Extension de liaisons.

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

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

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

Voir aussi

Référence

SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding

Concepts

Liaisons fournies par le système

Autres ressources

Extension de liaisons