Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Windows Communication Foundation (WCF) включает несколько системных привязок, которые можно настроить, но не обеспечивают полную гибкость при настройке всех параметров безопасности, поддерживаемых WCF. В этом разделе описывается создание пользовательской привязки непосредственно из отдельных элементов привязки с рассмотрением некоторых из параметров безопасности, которые могут быть заданы при создании такой привязки. Дополнительные сведения о создании пользовательских привязок см. в разделе "Расширение привязок".
Предупреждение
SecurityBindingElement не поддерживает форму канала IDuplexSessionChannel, которая по умолчанию используется формами каналов TCP-транспорта, если свойство TransferMode имеет значение Buffered. Необходимо задать свойству TransferMode значение Streamed для использования элемента SecurityBindingElement в этом сценарии.
Создание пользовательской привязки
В 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<T> класса BindingElement.Создайте экземпляр класса TextMessageEncodingBindingElement и добавьте его в коллекцию (
outputBec
). Этим задается кодирование, используемое привязкой.Создайте объект HttpTransportBindingElement и добавьте его в коллекцию (
outputBec
). Этим указывается, что привязка использует транспорт по протоколу HTTP.Создайте новую пользовательскую привязку путем создания экземпляра класса CustomBinding и передачи коллекции
outputBec
конструктору.Полученная пользовательская привязка обладает многими из характеристик стандартной привязки WSHttpBinding. Она предусматривает безопасность уровня сообщений и учетные данные Windows (однако отключает безопасные сеансы), требует внештатного задания учетных данных службы и не шифрует подписи. Последним можно управлять, только если определить свойство MessageProtectionOrder, как показано на шаге 4. Другими двумя можно управлять с помощью параметров стандартной привязки.
Пример
Description
Следующий пример кода представляет собой полноценную функцию для создания пользовательской привязки с использованием класса SymmetricSecurityBindingElement.
Код
// 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