Как настраивать подтверждение сигнатуры
Подтверждение подписи — это механизм, позволяющий инициатору сообщения убедиться, что полученный ответ был сформирован в ответ на исходное сообщение отправителя. Подтверждение подписи определено в спецификации WS-Security 1.1. Если конечная точка поддерживает WS-Security 1.0, использовать подтверждение подписи нельзя.
В процедурах ниже показано, как включить подтверждение подписи, используя элемент привязки AsymmetricSecurityBindingElement. Аналогичным образом можно использовать элемент привязки SymmetricSecurityBindingElement. Эта процедура основывается на базовых шагах, описанных в разделе Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement.
Включение подтверждения подписи в коде
Создайте экземпляр класса BindingElementCollection.
Создайте экземпляр класса SymmetricSecurityBindingElement.
Присвойте свойству RequireSignatureConfirmation значение true.
Добавьте элемент безопасности в коллекцию элементов привязки.
Создайте пользовательскую привязку, как описано в разделе Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement.
Включение подтверждения подписи в конфигурации
Добавьте элемент <bindings> в раздел <customBinding> файла конфигурации.
Добавьте элемент <binding> и присвойте атрибуту имени соответствующее значение.
Добавьте соответствующий элемент кодирования. В приведенном ниже примере добавляется элемент <TextMessageEncoding>.
Добавьте дочерний элемент <security> и присвойте атрибуту requireSignatureConfirmation значение true.
(Необязательно.) Чтобы включить подтверждение подписи в ходе начальной загрузки, добавьте дочерний элемент secureConversationBootstrap element и присвойте атрибуту equireSignatureConfirmation значение true.
Добавьте соответствующий элемент транспорта. В следующем примере добавляется элемент httpTransport element:
<bindings> <customBinding> <binding name="SignatureConfirmationBinding"> <security requireSignatureConfirmation="true"> <secureConversationBootstrap requireSignatureConfirmation="true" /> </security> <textMessageEncoding /> <httpTransport /> </binding> </customBinding> </bindings>
Пример
В приведенном ниже коде создается экземпляр класса SymmetricSecurityBindingElement и свойству RequireSignatureConfirmation присваивается значение true. Обратите внимание, что в этом примере не используется элемент <secureConversationBootstrap>, показанный в предыдущем примере. В этом примере демонстрируется подтверждение подписи при использовании маркера Windows (по протоколу Kerberos). В данном случае подпись клиента возвращается во всех ответах службы и подтверждается клиентом.
Private Function CreateBinding() As Binding
Dim bindings As New BindingElementCollection()
Dim tokens As New KerberosSecurityTokenParameters()
Dim security As New SymmetricSecurityBindingElement(tokens)
' Require that every request and return be correlated.
security.RequireSignatureConfirmation = True
bindings.Add(security)
Dim encoding As New TextMessageEncodingBindingElement()
bindings.Add(encoding)
Dim transport As New HttpTransportBindingElement()
bindings.Add(transport)
Dim myBinding As New CustomBinding(bindings)
Return myBinding
End Function
private Binding CreateBinding()
{
BindingElementCollection bindings = new BindingElementCollection();
KerberosSecurityTokenParameters tokens = new KerberosSecurityTokenParameters();
SymmetricSecurityBindingElement security =
new SymmetricSecurityBindingElement(tokens);
// Require that every request and return be correlated.
security.RequireSignatureConfirmation = true;
bindings.Add(security);
TextMessageEncodingBindingElement encoding = new TextMessageEncodingBindingElement();
bindings.Add(encoding );
HttpTransportBindingElement transport = new HttpTransportBindingElement();
bindings.Add(transport);
CustomBinding myBinding = new CustomBinding(bindings);
return myBinding;
}
См. также
Задачи
Как создать SecurityBindingElement для заданного режима проверки подлинности
Справочник
SymmetricSecurityBindingElement
AsymmetricSecurityBindingElement
CreateMutualCertificateBindingElement
Основные понятия
Как создавать пользовательскую привязку с использованием элемента SecurityBindingElement