Практическое руководство. Создание пользовательской привязки с использованием элемента SecurityBindingElement

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

  1. Создайте экземпляр класса BindingElementCollection с именем outputBec.

  2. Вызовите статический метод M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), который возвращает экземпляр класса SymmetricSecurityBindingElement.

  3. Добавьте объект SymmetricSecurityBindingElement в коллекцию (outputBec), вызвав метод Add класса Collection<T> класса BindingElement.

  4. Создайте экземпляр класса TextMessageEncodingBindingElement и добавьте его в коллекцию (outputBec). Этим задается кодирование, используемое привязкой.

  5. Создайте объект HttpTransportBindingElement и добавьте его в коллекцию (outputBec). Этим указывается, что привязка использует транспорт по протоколу HTTP.

  6. Создайте новую пользовательскую привязку путем создания экземпляра класса CustomBinding и передачи коллекции outputBec конструктору.

  7. Полученная пользовательская привязка обладает многими из характеристик стандартной привязки 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

См. также