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

Безопасность 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 для режима транспорта

  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 для режима сообщения

  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
    

Установка свойства Mode и 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).

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

См. также