Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement
В Windows Communication Foundation (WCF) предусмотрено несколько предоставляемых системой привязок, подлежащих настройке, однако не способных в полной мере обеспечить гибкость настройки всех параметров безопасности, поддерживаемых WCF. В этом разделе показано создание пользовательской привязки непосредственно из отдельных элементов привязки, с рассмотрением некоторых из параметров безопасности, которые могут быть заданы при создании такой привязки. Дополнительные сведения создании пользовательских привязок см. в разделе Расширение привязок.
Создание пользовательской привязки
В WCF все привязки состоят из элементов привязки. Каждый элемент привязки наследуется от класса BindingElement. В случае стандартных предоставляемых системой привязок элементы привязки уже созданы и настроены, хотя значения некоторых свойств можно изменить.
В противоположность этому при создании пользовательской привязки потребуется создать и настроить элементы привязки и создать из этих элементов объект CustomBinding.
Для этого необходимо добавить отдельные элементы привязки в коллекцию, представляемую экземпляром класса BindingElementCollection, а затем задать свойство Elements класса CustomBinding равным этому объекту. Добавлять элементы привязки необходимо в следующем порядке: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding и Transport. Обратите внимание, что все перечисленные элементы привязки являются обязательными для каждой привязки.
SecurityBindingElement
С безопасностью уровня сообщений связаны три элемента привязки; все они наследуются от класса SecurityBindingElement. Эти три элемента называются TransportSecurityBindingElement, SymmetricSecurityBindingElement и AsymmetricSecurityBindingElement. Элемент TransportSecurityBindingElement используется для обеспечения смешанного режима безопасности. Другие два элемента используются, когда безопасность обеспечивается уровнем сообщений.
При обеспечении безопасности на транспортном уровне используются дополнительные классы:
Обязательные элементы привязки
Существует большое количество возможных элементов привязки, которые можно сочетать в одной привязке. При этом не все сочетания являются допустимыми. В этом разделе описываются обязательные элементы, которые должны присутствовать в привязке безопасности.
Допустимые привязки безопасности зависят от многих факторов, в том числе:
режима безопасности;
транспортного протокола;
шаблона обмена сообщениями (MEP), заданного в контракте.
В следующей таблице приведены допустимые конфигурации стека элементов привязки для каждого сочетания перечисленных выше факторов. Эти конфигурации представляют собой минимальные требования. В привязку можно добавлять дополнительные элементы, такие как элементы для кодирования сообщений, элементы для транзакций и другие.
Режим безопасности | Транспорт | Шаблон обмена сообщениями в контракте | ||||
---|---|---|---|---|---|---|
|
|
Datagram |
Request Reply |
Duplex |
||
Транспорт |
HTTPS |
|||||
|
|
OneWayBindingElement |
||||
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|||||
|
TCP |
|||||
|
|
OneWayBindingElement |
||||
SSL или Windows StreamSecurityBindingElement |
SSL или Windows StreamSecurityBindingElement |
SSL или Windows StreamSecurityBindingElement |
||||
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||||
Сообщения |
HTTP |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation) |
||
|
CompositeDuplexBindingElement |
|||||
|
|
OneWayBindingElement |
|
OneWayBindingElement |
||
HttpTransportBindingElement |
HttpTransportBindingElement |
HttpTransportBindingElement |
||||
|
TCP |
SecurityBindingElement |
SecurityBindingElement |
SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation) |
||
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||||
Смешанный (транспорта с учетными данными сообщения) |
HTTPS |
TransportSecurityBindingElement |
TransportSecurityBindingElement |
|
||
|
|
OneWayBindingElement |
|
|
||
|
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|
|||
|
TCP |
TransportSecurityBindingElement |
SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation) |
SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation) |
||
|
|
OneWayBindingElement |
||||
SSL или Windows StreamSecurityBindingElement |
SSL или Windows StreamSecurityBindingElement |
SSL или Windows StreamSecurityBindingElement |
||||
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
Обратите внимание, что у элементов привязки безопасности имеется ряд настраиваемых параметров. Дополнительные сведения см. в разделе Режимы проверки подлинности SecurityBindingElement.
Дополнительные сведения см. в разделе Безопасные диалоги и безопасные сеансы.
Процедуры
Создание пользовательской привязки с использованием элемента SymmetricSecurityBindingElement
Создайте экземпляр класса BindingElementCollection с именем
outputBec
.Вызовите статический метод M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), который возвращает экземпляр класса SymmetricSecurityBindingElement.
Добавьте объект SymmetricSecurityBindingElement в коллекцию (
outputBec
), вызвав метод Add класса Collection класса BindingElement.Создайте экземпляр класса TextMessageEncodingBindingElement и добавьте его в коллекцию (
outputBec
). Этим задается кодирование, используемое привязкой.Создайте объект HttpTransportBindingElement и добавьте его в коллекцию (
outputBec
). Этим указывается, что привязка использует транспорт по протоколу HTTP.Создайте новую пользовательскую привязку путем создания экземпляра класса CustomBinding и передачи коллекции
outputBec
конструктору.Полученная пользовательская привязка обладает многими из характеристик стандартной привязки WSHttpBinding. Она предусматривает безопасность уровня сообщений и учетные данные Windows (однако отключает безопасные сеансы), требует внештатного задания учетных данных службы и не шифрует подписи. Последним можно управлять, только если определить свойство MessageProtectionOrder, как показано на шаге 4. Другими двумя можно управлять с помощью параметров стандартной привязки.
Пример
Описание
Следующий пример кода представляет собой полноценную функцию для создания пользовательской привязки с использованием класса SymmetricSecurityBindingElement.
Код
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);
См. также
Справочник
SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding
Основные понятия
Привязки, предоставляемые системой