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


Практическое руководство. Создание подтверждающих учетных данных

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

Примечание.

Спецификация для поддержки учетных данных является частью спецификации WS-SecurityPolicy. Дополнительные сведения см . в спецификациях безопасности веб-служб.

Вспомогательные маркеры

Кратко, при использовании безопасности сообщений первичные учетные данные всегда используются для защиты сообщения (например, сертификата X.509 или билета Kerberos).

Согласно спецификации, привязка безопасности использует маркеры для защиты обмена сообщениями. Маркер представляет собой представление учетных данных безопасности.

Привязка безопасности использует основной маркер, определенный в политике привязки безопасности, для создания подписи. Эта подпись называется подписью сообщения.

Чтобы расширить утверждения, предоставляемые маркером, связанным с подписью сообщения, можно задать дополнительные маркеры.

Подтверждение, подпись и шифрование

Вспомогательные учетные данные приводят к тому, что маркер поддержки передается внутри сообщения. Спецификация WS-SecurityPolicy определяет четыре способа прикрепления вспомогательного маркера к сообщению (см. следующую таблицу).

Характер использования Description
Со знаком Вспомогательный маркер включен в заголовок безопасности и подписан подписью сообщения.
Подтверждающий Подтверждающий маркер подписывает подпись сообщения.
Подписанный и подтверждающий Подписанные подтверждающие маркеры подписывают весь элемент ds:Signature, произведенный из подписи сообщения, и сами подписываются этой подписью сообщения; то есть оба маркера (маркер, используемый для подписи сообщения, и подписанный подтверждающий маркер) подписывают друг друга.
Подписанный и шифрующий Подписанные, зашифрованные вспомогательные маркеры - это подписанные вспомогательные маркеры, которые шифруются при появлении в wsse:SecurityHeader.

Программирование вспомогательных учетных данных

Чтобы создать службу, использующую вспомогательные маркеры, необходимо создать customBinding>.< (Дополнительные сведения см. в разделе Практическое руководство. Создание пользовательской привязки с помощью securityBindingElement.)

Первым шагом в создании пользовательской привязки является создание элемента привязки безопасности одного из трех следующих типов.

Все классы наследуются от элемента привязки безопасности SecurityBindingElement, включающего четыре взаимосвязанных свойства.

Области

Для вспомогательных учетных данных существует две области.

  • Конечная точка, поддерживающая маркеры , поддерживают все операции конечной точки. Это значит, что учетные данные, представляемые вспомогательным маркером, могут использоваться всякий раз при вызове операций конечной точки.

  • Поддержка операций маркеров поддерживает только определенную операцию конечной точки.

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

Процедуры

Создание пользовательской привязки, которая включает вспомогательные учетные данные

  1. Создайте элемент привязки безопасности. В следующем примере продемонстрировано создание элемента привязки безопасности SymmetricSecurityBindingElement в режиме проверки подлинности UserNameForCertificate. Используйте метод CreateUserNameForCertificateBindingElement.

  2. Добавьте вспомогательный параметр в коллекцию типов, возвращаемых соответствующим свойством (Endorsing, Signed, SignedEncrypted или SignedEndorsed). Типы в пространстве имен System.ServiceModel.Security.Tokens включают наиболее часто используемые типы, такие как X509SecurityTokenParameters.

Пример

Description

В следующем примере показано, как создать экземпляр SymmetricSecurityBindingElement и добавить экземпляр класса KerberosSecurityTokenParameters в коллекцию, возвращенную свойством Endorsing.

Код

public static Binding CreateMultiFactorAuthenticationBinding()
{
    HttpTransportBindingElement httpTransport = new HttpTransportBindingElement();

    // The message security binding element will be configured to require 2 tokens:
    // 1) A user name/password encrypted with the service token.
    // 2) A client certificate used to sign the message.

    // Instantiate a binding element that will require the user name/password token
    // in the message (encrypted with the server certificate).
    SymmetricSecurityBindingElement messageSecurity = SecurityBindingElement.CreateUserNameForCertificateBindingElement();

    // Create supporting token parameters for the client X.509 certificate.
    X509SecurityTokenParameters clientX509SupportingTokenParameters = new X509SecurityTokenParameters();
    // Specify that the supporting token is passed in the message send by the client to the service.
    clientX509SupportingTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
    // Turn off derived keys.
    clientX509SupportingTokenParameters.RequireDerivedKeys = false;
    // Augment the binding element to require the client's X.509 certificate as an
    // endorsing token in the message.
    messageSecurity.EndpointSupportingTokenParameters.Endorsing.Add(clientX509SupportingTokenParameters);

    // Create a CustomBinding based on the constructed security binding element.
    return new CustomBinding(messageSecurity, httpTransport);
}

См. также