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
Créez une instance de la classe BindingElementCollection portant le nom
outputBec
.Appelez la méthode statique
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)
, qui retourne une instance de la classe SymmetricSecurityBindingElement.Ajoutez SymmetricSecurityBindingElement à la collection (
outputBec
) en appelant la méthodeAdd
de Collection<T> de la classe BindingElement.Créez une instance de la classe TextMessageEncodingBindingElement et ajoutez-la à la collection (
outputBec
). Cela spécifie l’encodage utilisé par la liaison.Créez un HttpTransportBindingElement et ajoutez-le à la collection
outputBec
. Cela indique que la liaison utilise le transport HTTP.Créez une liaison personnalisée en créant une instance de la classe CustomBinding et en passant la collection
outputBec
au constructeur.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