Guide pratique pour créer une liaison personnalisée à l’aide de SecurityBindingElement

Windows Communication Foundation (WCF) inclut plusieurs liaisons fournies par le système qui peuvent être configurées, mais ne fournissent pas une flexibilité totale lors de la configuration de toutes les options de sécurité que WCF prend en charge. Cette rubrique montre comment créer une liaison personnalisée directement à partir d’éléments de liaison individuels et met en surbrillance certains des paramètres de sécurité qui peuvent être spécifiés lors de la création d’une telle liaison. Pour plus d’informations sur la création de liaisons personnalisées, consultez Extension des 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 est défini sur Buffered. Vous devez définir TransferMode sur Streamed afin de pouvoir utiliser SecurityBindingElement dans ce scénario.

Création d’une liaison personnalisée

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

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

Pour ce faire, vous ajoutez les éléments de liaison individuels à une collection représentée par une instance de la BindingElementCollection classe, puis définissez la Elements propriété de l’égal CustomBinding à 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, encodage de message et transport. Notez que tous les éléments de liaison répertoriés ne sont pas obligatoires dans chaque liaison.

Securitybindingelement

Trois éléments de liaison sont liés à la sécurité au niveau du message, qui dérivent toutes de la SecurityBindingElement classe. Les trois sont TransportSecurityBindingElement, SymmetricSecurityBindingElementet AsymmetricSecurityBindingElement. Le TransportSecurityBindingElement est utilisé pour fournir une sécurité en mode mixte. Les deux autres éléments sont utilisés lorsque la couche de messages fournit une sécurité.

Des classes supplémentaires sont utilisées lorsque la sécurité au niveau du transport est fournie :

Éléments de liaison obligatoires

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

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

  • Mode de sécurité.

  • Protocole de transport

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

Le tableau suivant présente les configurations de pile d’éléments de liaison valides pour chaque combinaison des facteurs précédents. Notez qu’il s’agit de conditions minimales. Vous pouvez ajouter des éléments de liaison supplémentaires à la liaison, tels que des éléments de liaison d’encodage de message, des éléments de liaison de transaction et d’autres éléments de liaison.

Mode de sécurité Transport Modèle d’échange de messages de contrat Modèle d’échange de messages de contrat Modèle d’échange de messages de contrat
Datagram Request Reply Duplex
Transport Https
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP
OneWayBindingElement
SSL ou Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Message HTTP SymmetricSecurityBindingElement SymmetricSecurityBindingElement SymmetricSecurityBindingElement (mode d’authentification = SecureConversation)
ÉlémentDeLiaisonDuplexComposite
OneWayBindingElement ÉlémentDeLiasonUnidirectionnelle
HttpTransportBindingElement Élément de liaison de transport HTTP HttpTransportBindingElement
Tcp Securitybindingelement Securitybindingelement SymmetricSecurityBindingElement (mode d’authentification = SecureConversation)
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Mixte (transport avec identifiants de message) Https TransportSecurityBindingElement TransportSecurityBindingElement
OneWayBindingElement
HttpsTransportBindingElement HttpsTransportBindingElement
TCP TransportSecurityBindingElement SymmetricSecurityBindingElement (mode d’authentification = SecureConversation) SymmetricSecurityBindingElement (mode d’authentification = SecureConversation)
OneWayBindingElement
SSL ou Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElement SSL ou Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement

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

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

Procedures

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

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

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

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

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

  5. Créez un HttpTransportBindingElement élément et ajoutez-le à la collection (outputBec). Cela spécifie que la liaison utilise le transport HTTP.

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

  7. La liaison personnalisée résultante partage la plupart des mêmes caractéristiques que la norme WSHttpBinding. Il spécifie la sécurité au niveau du message et les informations d’identification Windows, mais désactive les sessions sécurisées, exige que les informations d’identification du service soient spécifiées hors bande et ne chiffrent pas les signatures. La dernière peut être contrôlée uniquement en définissant la propriété comme indiqué à l’étape MessageProtectionOrder 4. Les deux autres peuvent être contrôlés à l’aide de paramètres sur la liaison standard.

Exemple

Description

L’exemple suivant fournit une fonction complète pour créer une liaison personnalisée qui utilise un 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 également