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


Практическое руководство. Настройка подтверждения сигнатуры

Подтверждение подписи — это механизм инициатора сообщения, чтобы убедиться, что полученный ответ был создан в ответ на исходное сообщение отправителя. Подтверждение подписи определено в спецификации WS-Security 1.1. Если конечная точка поддерживает WS-Security 1.0, использовать подтверждение подписи нельзя.

В процедурах ниже показано, как включить подтверждение подписи, используя элемент привязки AsymmetricSecurityBindingElement. Аналогичным образом можно использовать элемент привязки SymmetricSecurityBindingElement. Процедура основана на основных шагах, описанных в разделе "Практическое руководство. Создание пользовательской привязки с помощью SecurityBindingElement".

Включение подтверждения подписи в коде

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

  2. Создайте экземпляр класса SymmetricSecurityBindingElement.

  3. Задайте для RequireSignatureConfirmation значение true.

  4. Добавьте элемент безопасности в коллекцию элементов привязки.

  5. Создайте пользовательскую привязку, как указано в руководстве. Создание пользовательской привязки с помощью SecurityBindingElement.

Включение подтверждения подписи в конфигурации

  1. Добавьте элемент <customBinding> в раздел <bindings> файла конфигурации.

  2. Добавьте элемент <binding> и присвойте атрибуту имени соответствующее значение.

  3. Добавьте соответствующий элемент кодирования. В следующем примере добавляется элемент <TextMessageEncoding>.

  4. Добавьте дочерний элемент <security> и присвойте атрибуту requireSignatureConfirmation значение true.

  5. Необязательно. Чтобы включить подтверждение подписи во время начальной загрузки, добавьте дочерний <элемент secureConversationBootstrap> и задайте для атрибута trueзначение requireSignatureConfirmation .

  6. Добавьте соответствующий элемент транспорта. В следующем примере добавляется <httpTransport>:

    <bindings>
      <customBinding>
        <binding name="SignatureConfirmationBinding">
          <security requireSignatureConfirmation="true">
            <secureConversationBootstrap requireSignatureConfirmation="true" />
              </security>
           <textMessageEncoding />
             <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    

Пример

В приведенном ниже коде создается экземпляр класса SymmetricSecurityBindingElement и свойству RequireSignatureConfirmation присваивается значение true. Обратите внимание, что в этом примере не используется элемент <secureConversationBootstrap>, показанный в предыдущем примере. В этом примере демонстрируется подтверждение подписи при использовании маркера Windows (по протоколу Kerberos). В данном случае подпись клиента возвращается во всех ответах службы и подтверждается клиентом.

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;
}
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

См. также