Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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
Создайте экземпляр 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. Другие два можно контролировать с помощью параметров стандартной привязки.
Пример
Описание
В следующем примере представлена полная функция для создания пользовательской привязки, которая использует объект 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