Практическое руководство. Задание режима безопасности

Безопасность Windows Communication Foundation (WCF) имеет три распространенных режима безопасности, которые находятся в большинстве предопределенных привязок: транспорт, сообщение и транспорт с учетными данными сообщения. Два дополнительных режима относятся к двум привязкам: режим "только для учетных данных транспорта", найденный в режиме BasicHttpBinding"Оба", найденном в элементе NetMsmqBinding. Однако в этом разделе основное внимание уделяется трем наиболее распространенным режимам безопасности: Transport, Message и TransportWithMessageCredential.

Обратите внимание, что не все предварительно определенные привязки поддерживают все указанные режимы. В этом разделе режим задается с помощью классов WSHttpBinding и NetTcpBinding; также в этом разделе показан порядок задания режима как программно, так и с помощью конфигурации.

Дополнительные сведения см. в разделе "Безопасность WCF", " Обзор безопасности", "Защита служб" и "Защита служб и клиентов". Дополнительные сведения о режиме транспорта и сообщении см. в разделе "Безопасность транспорта" и "Безопасность сообщений".

Задание режима безопасности в коде

  1. Создайте экземпляр используемого класса привязки. Список предопределенных привязок см. в разделе "Предоставленные системой привязки". В данном примере создается экземпляр класса WSHttpBinding.

  2. Задайте свойство Mode объекта, возвращаемого свойством Security.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    

    Или задайте режим "сообщение", как показано в следующем примере кода.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    

    Или задайте режим "транспорт с учетными данными сообщения", как показано в следующем примере кода.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.TransportWithMessageCredential;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.TransportWithMessageCredential
    
  3. Также можно задать режим в конструкторе привязки, как показано в следующем примере кода.

    WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
    
    Dim b As New WSHttpBinding(SecurityMode.Message)
    

Задание свойства ClientCredentialType

Задание одного из трех значений режима определяет способ задания свойства ClientCredentialType. Например, при использовании класса WSHttpBinding задание режима Transport означает, что необходимо присвоить свойству ClientCredentialType класса HttpTransportSecurity соответствующее значение.

Задание свойства ClientCredentialType для режима Transport

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

  2. Установите свойство Mode в значение Transport.

  3. Присвойте свойству ClientCredential соответствующее значение. В следующем примере кода показано, как присвоить свойству значение Windows.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Transport;
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Transport
    b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
    

Задание свойства ClientCredentialType для режима Message

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

  2. Установите свойство Mode в значение Message.

  3. Присвойте свойству ClientCredential соответствующее значение. В следующем примере кода показано, как присвоить свойству значение Certificate.

    WSHttpBinding b = new WSHttpBinding();
    b.Security.Mode = SecurityMode.Message;
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
    
    Dim b As New WSHttpBinding()
    b.Security.Mode = SecurityMode.Message
    b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
    

Задание режима и свойства ClientCredentialType в конфигурации

  1. Добавьте соответствующий элемент привязки в <элемент bindings> файла конфигурации. В следующем примере добавляется <элемент wsHttpBinding> .

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

  3. Добавьте элемент <security> и присвойте атрибуту mode значение Message, Transport или TransportWithMessageCredential.

  4. Если задан режим Transport, добавьте элемент <transport> и присвойте атрибуту clientCredential соответствующее значение.

    В следующем примере задается режим "Transport", а затем атрибуту clientCredentialType элемента <transport> присваивается значение "Windows".

    <wsHttpBinding>
    <binding name="TransportSecurity">
        <security mode="Transport" >
           <transport clientCredentialType = "Windows" />
        </security>
    </binding>
    </wsHttpBinding >
    

    Можно также задать для атрибута security mode значение "Message", а затем указать элемент <"message">. В этом примере атрибуту clientCredentialType присваивается значение "Certificate".

    <wsHttpBinding>
    <binding name="MessageSecurity">
        <security mode="Message" >
           <message clientCredentialType = "Certificate" />
        </security>
    </binding>
    </wsHttpBinding >
    

    Значение TransportWithMessageCredential используется в особых случаях; подробнее см. ниже.

Использование режима TransportWithMessageCredential

При задании режима безопасностиTransportWithMessageCredential транспорт определяет фактический механизм, обеспечивающий безопасность на транспортном уровне. Например, протокол HTTP использует SSL по HTTP (HTTPS). Поэтому задание свойства ClientCredentialType любого объекта безопасности транспорта (такого как HttpTransportSecurity) игнорируется. Другими словами, можно задать только свойство ClientCredentialType объекта безопасности сообщения (для привязки WSHttpBinding это объект NonDualMessageSecurityOverHttp).

Дополнительные сведения см. в разделе "Практическое руководство. Использование учетных данных безопасности транспорта и сообщений".

См. также