Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Безопасность Windows Communication Foundation (WCF) имеет три распространённых режима безопасности, которые присутствуют в большинстве предопределённых привязок: транспортный, на уровне сообщения и транспортный с учётными данными сообщения. Два дополнительных режима специфичны для двух привязок: режим "только учётные данные транспорта", который используется в BasicHttpBinding, и режим "Оба", который применяется в NetMsmqBinding. Однако в этом разделе рассматриваются три распространенных режима безопасности: Transport, Messageи TransportWithMessageCredential.
Обратите внимание, что не каждая предопределенная привязка поддерживает все эти режимы. В этой теме устанавливаются режимы с помощью классов WSHttpBinding и NetTcpBinding, а также демонстрируется, как настроить режим как программно, так и с помощью конфигурации.
Дополнительные сведения см. в разделе "Безопасность WCF", " Обзор безопасности", "Защита служб" и "Защита служб и клиентов". Дополнительные сведения о режиме транспорта и сообщении см. в разделе "Безопасность транспорта " и "Безопасность сообщений".
Настройка режима безопасности в коде
Создайте экземпляр используемого класса привязки. Список предопределенных привязок см. в разделе Системные привязки. В этом примере создается экземпляр WSHttpBinding класса.
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Можно также задать режим в конструкторе привязки, как показано в следующем коде.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);Dim b As New WSHttpBinding(SecurityMode.Message)
Задание свойства ClientCredentialType
Установка режима на одно из трех значений определяет, как задать ClientCredentialType свойство. Например, используя WSHttpBinding класс, установка режима на Transport означает, что вы должны задать свойству ClientCredentialType класса HttpTransportSecurity соответствующее значение.
Установка свойства ClientCredentialType для режима транспорта
Создайте экземпляр привязки.
Задайте для свойства
ModeзначениеTransport.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 для режима сообщения
Создайте экземпляр привязки.
Задайте для свойства
ModeзначениеMessage.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 в конфигурации
Добавьте соответствующий элемент привязки в элемент <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).
Дополнительные сведения см. в разделе "Практическое руководство. Использование учетных данных безопасности транспорта и сообщений".