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


Как: Создать пользовательскую привязку с помощью SecurityBindingElement

Windows Communication Foundation (WCF) включает несколько системных привязок, которые можно настроить, но не обеспечивают полную гибкость при настройке всех параметров безопасности, поддерживаемых WCF. В этом разделе показано, как создать пользовательскую привязку непосредственно из отдельных элементов привязки и выделить некоторые параметры безопасности, которые можно указать при создании такой привязки. Дополнительные сведения о создании пользовательских привязок см. в разделе "Расширение привязок".

Предупреждение

SecurityBindingElement не поддерживает фигуру IDuplexSessionChannel канала, которая является фигурой канала по умолчанию, используемой транспортом TCP, если TransferMode задано значение Buffered. Для использования SecurityBindingElement в этом сценарии необходимо установить TransferMode на Streamed.

Создание пользовательской привязки

В WCF все привязки состоят из элементов привязки. Каждый элемент привязки наследуется от класса BindingElement. Для стандартных системных привязок элементы привязки создаются и настраиваются для вас, хотя можно настроить некоторые параметры свойств.

Для того чтобы создать пользовательскую привязку, сначала создаются и настраиваются элементы привязки, из которых затем формируется CustomBinding.

Для этого добавьте отдельные элементы привязки в коллекцию, представленную экземпляром класса BindingElementCollection, а затем установите свойство Elements в CustomBinding равным этому объекту. Необходимо добавить элементы привязки в следующем порядке: поток транзакций, надежный сеанс, безопасность, составной дуплекс, односторонняя, потоковая безопасность, кодировка сообщений и транспорт. Обратите внимание, что не все перечисленные элементы привязки требуются в каждой привязке.

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
Message Протокол HTTP SymmetricSecurityBindingElement SymmetricSecurityBindingElement SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation)
CompositeDuplexBindingElement
OneWayBindingElement ЭлементОдностороннейПривязки
HttpTransportBindingElement HttpTransportBindingElement HttpTransportBindingElement
Протокол TCP Securitybindingelement Securitybindingelement SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation)
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement
Смешанный (транспорт с идентификационными данными сообщения) Https TransportSecurityBindingElement TransportSecurityBindingElement
ЭлементОдностороннегоСвязывания
HttpsTransportBindingElement HttpsTransportBindingElement
Протокол tcp TransportSecurityBindingElement SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation) SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation)
OneWayBindingElement
SSL или Windows StreamSecurityBindingElement SSL или Windows StreamSecurityBindingElement SSL или Windows StreamSecurityBindingElement
TcpTransportBindingElement TcpTransportBindingElement TcpTransportBindingElement

Обратите внимание, что в SecurityBindingElements существует множество настраиваемых параметров. Дополнительные сведения см. в разделе "Режимы проверки подлинности SecurityBindingElement".

Дополнительные сведения см. в разделе "Безопасные беседы" и "Безопасные сеансы".

Procedures

Для создания настраиваемой привязки, использующую 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. Другие два можно контролировать с помощью параметров стандартной привязки.

Пример

Описание

В следующем примере представлена полная функция для создания пользовательской привязки, которая использует объект 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

См. также