Поделиться через


Как создавать пользовательскую привязку с использованием элемента 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

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

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

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

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

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

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

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

Основные понятия

Привязки, предоставляемые системой

Другие ресурсы

Расширение привязок