Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
Créez une instance de la BindingElementCollection classe avec le nom
outputBec.Appelez la méthode
M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true)statique, qui retourne une instance de la SymmetricSecurityBindingElement classe.Ajoutez SymmetricSecurityBindingElement à la collection (
outputBec) en appelant la méthodeAddde la classe BindingElement du Collection<T>.Créez une instance de la TextMessageEncodingBindingElement classe et ajoutez-la à la collection (
outputBec). Cela spécifie l’encodage utilisé par la liaison.Créez un HttpTransportBindingElement élément et ajoutez-le à la collection (
outputBec). Cela spécifie que la liaison utilise le transport HTTP.Créez une liaison personnalisée en créant une instance de la CustomBinding classe et en transmettant la collection
outputBecau constructeur.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