Как задать режим безопасности
В механизме безопасности Windows Communication Foundation (WCF) предусмотрено три наиболее распространенных режима безопасности, которые используются в большинстве предварительно определенных привязок: транспорт, сообщение, и "транспорт с учетными данными сообщения". Два дополнительных режима характерны для двух привязок: режим "Только учетные данные транспорта", используемый в BasicHttpBinding, режим "Оба", используемый в NetMsmqBinding. Однако в этом разделе основное внимание уделяется трем наиболее распространенным режимам безопасности: Transport, Message и TransportWithMessageCredential.
Обратите внимание, что не все предварительно определенные привязки поддерживают все указанные режимы. В этом разделе режим задается с помощью классов WSHttpBinding и NetTcpBinding; также в этом разделе показан порядок задания режима как программно, так и с помощью конфигурации.
Дополнительные сведения WCF безопасности см. в разделах Общие сведения о безопасности, Защита служб и Защита служб и клиентов. Дополнительные сведения режимах безопасности транспорта и сообщений см. в разделах Безопасность транспорта и Безопасность сообщений в WCF.
Задание режима безопасности в коде
Создайте экземпляр используемого класса привязки. Список предварительно определенных привязок см. в разделе Привязки, предоставляемые системой. В данном примере создается экземпляр класса WSHttpBinding.
Задайте свойство Mode объекта, возвращаемого свойством Security.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;
Или задайте режим "сообщение", как показано в следующем примере кода.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message;
Или задайте режим "транспорт с учетными данными сообщения", как показано в следующем примере кода.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportWithMessageCredential
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.TransportWithMessageCredential;
Также можно задать режим в конструкторе привязки, как показано в следующем примере кода.
Dim b As New WSHttpBinding(SecurityMode.Message)
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
Задание свойства ClientCredentialType
Задание одного из трех значений режима определяет способ задания свойства ClientCredentialType. Например, при использовании класса WSHttpBinding задание режима Transport означает, что необходимо присвоить свойству ClientCredentialType класса HttpTransportSecurity соответствующее значение.
Задание свойства ClientCredentialType для режима Transport
Создайте экземпляр привязки.
Задайте для свойства Mode значение Transport.
Присвойте свойству ClientCredential соответствующее значение. В следующем примере кода показано, как присвоить свойству значение Windows.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Задание свойства ClientCredentialType для режима Message
Создайте экземпляр привязки.
Задайте для свойства Mode значение Message.
Присвойте свойству ClientCredential соответствующее значение. В следующем примере кода показано, как присвоить свойству значение Certificate.
Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message; b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
Задание режима и свойства ClientCredentialType в конфигурации
Добавьте соответствующий элемент привязки в элемент <bindings> файла конфигурации. В следующем примере добавляется элемент <wsHttpBinding>.
Добавьте элемент
<binding>
и присвойте его атрибуту name соответствующее значение.Добавьте элемент
<security>
и присвойте атрибуту mode значение Message, Transport или TransportWithMessageCredential.Если задан режим 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).
Дополнительные сведения см. в разделе Как использовать средства обеспечения безопасности транспорта и учетные данные сообщения.
См. также
Задачи
Как настраивать порт с использованием SSL-сертификата
Как использовать средства обеспечения безопасности транспорта и учетные данные сообщения
Основные понятия
Безопасность сообщений в WCF
Общие сведения о безопасности
Привязки, предоставляемые системой
Другие ресурсы
Безопасность транспорта
<security> of <wsHttpBinding>
<security> of <basicHttpBinding>
<security> of <netTcpBinding>