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


Выбор типа учетных данных

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

Во многих странах и регионах примером учетных данных могут служить водительские права. Водительские права содержат данные о личности и возможностях их обладателя. Они содержат доказательство владения в виде фотографии владельца. Водительские права выданы доверенной организацией (центром авторизации), обычно государственным органом. Водительские права ламинированы и могут содержать голограмму, подтверждающую, что права не изменены или подделаны.

При предоставлении учетных данных требуется предоставить как сами данные, так и доказательство обладания этими данными. WCF поддерживает учетные данные различных типов как на уровне безопасности транспорта, так и на безопасности уровне сообщений. Для примера рассмотрим два типа учетных данных в WCF: имя пользователя и сертификат (X.509).

При использовании в качестве учетных данных имени пользователя само имя пользователя представляет заявленную идентификацию, а пароль является доказательством прав обладания. Центром авторизации в данном случае является система, проверяющая имя пользователя и пароль.

При использовании в качестве учетных данных сертификата X.509 имя субъекта, альтернативное имя субъекта или определенные поля сертификата могут использоваться для представления заявленной идентификации, а другие поля, например Valid From и Valid To, указывают, действителен ли сертификат.

Типы учетных данных транспорта

В приведенной ниже таблице перечислены типы учетных данных клиента, которые можно использовать в режиме безопасности транспорта. При создании службы свойству ClientCredentialType задается одно из этих значений, указывающих тип учетных данных, которые должен предоставить клиент для связи с этой службой. Типы можно задавать как в коде, так и в файлах конфигурации.

Параметр Описание

None

Указывает, что клиенту не требуется предоставлять учетные данные. Это означает, что клиент является анонимным.

Basic

Задает для клиента обычную проверку подлинности. Дополнительные сведения см. в документе RFC2617 — «Проверка подлинности HTTP: обычная и дайджест-проверка подлинности».

Digest

Задает для клиента дайджест-проверку подлинности. Дополнительные сведения см. в документе RFC2617 — «Проверка подлинности HTTP: обычная и дайджест-проверка подлинности».

Ntlm

Задает проверку подлинности NTLM (NT LAN Manager). Этот параметр используется, если по какой-то причине нельзя использовать проверку подлинности Kerberos. Можно также отключить его использование в качестве резервного механизма, задав свойству AllowNtlm значение false. При установке этого значения использование NTLM приведет к созданию исключения WCF. Обратите внимание, что задание для данного свойства значения false не предотвращает отправку учетных данных NTLM по сети.

Windows

Задает проверку подлинности Windows. Чтобы установить в домене Windows режим использования только протокола Kerberos, задайте свойству AllowNtlm значение false (по умолчанию true).

Certificate

Выполняет проверку подлинности клиента с использованием сертификата X.509.

Password

Пользователь должен ввести имя пользователя и пароль. Контроль пары «имя пользователя и пароль» с помощью проверки подлинности Windows или другого пользовательского решения.

Типы учетных данных клиента при использовании безопасности сообщений

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

Параметр Описание

None

Указывает, что клиенту не требуется предоставлять учетные данные. Это означает, что клиент является анонимным.

Windows

Позволяет проводить обмен сообщениями SOAP в рамках контекста безопасности, созданного с использованием учетных данных Windows.

Username

Позволяет службе запрашивать проверку подлинности клиента на основе учетных данных типа «имя пользователя». Обратите внимание, что WCF не допускает каких-либо криптографических операций с именами пользователей, таких как создание подписи или шифрование данных. WCF обеспечивает безопасность транспорта при использовании учетных данных «имя пользователя».

Certificate

Позволяет службе запрашивать проверку подлинности клиента с помощью сертификата X.509.

Issued Token

Пользовательский тип маркера, настроенный в соответствии с политикой безопасности. Тип маркера по умолчанию — маркер языка SAML (Security Assertions Markup Language). Маркер выдается службой маркеров безопасности. Дополнительные сведения см. в разделе Федерация и выданные маркеры.

Модель согласования учетных данных служб

Согласование — это процесс установки отношений доверия между клиентом и службой за счет обмена учетными данными. Этот процесс выполняется между клиентом и службой последовательно, чтобы раскрывать только те сведения, которые нужны для следующего этапа процесса согласования. Обычно в результате согласования клиент получает учетные данные службы, которые используются при последующих операциях.

По умолчанию (за одним исключением) привязки, предоставленные системой в WCF, автоматически согласовывают учетные данные службы при использовании безопасности уровня сообщений. (Исключением является класс BasicHttpBinding, не включающий безопасность по умолчанию.) Для отключения такого поведения см. свойства NegotiateServiceCredential и NegotiateServiceCredential.

ms733836.note(ru-ru,VS.100).gifПримечание
Если средства обеспечения безопасности на основе SSL используются с платформой .NET Framework версии 3.5 и более поздней версии, для проверки цепочки сертификатов для сертификата службы клиент WCF использует как промежуточные сертификаты в своем хранилище сертификатов, так и промежуточные сертификаты, полученные в процессе согласования SSL. Платформа .NET Framework 3.0 использует только промежуточные сертификаты, установленные в локальном хранилище сертификатов.

Внешнее согласование

Если автоматическое согласование отключено, перед отправкой любых сообщений службе клиент должен предоставить учетные данные службы. Этот тип согласования называется также внешним. Например, если в качестве типа учетных данных указан сертификат, а автоматическое согласование отключено, клиент должен связаться с владельцем службы, чтобы получить и установить сертификат на том компьютере, на котором выполняется клиентское приложение. Это можно сделать, например, если нужно строго контролировать доступ клиентов к службе, обеспечивающей взаимодействие предприятий. Внешнее согласование можно выполнить по электронной почте, а сертификат X.509 сохраняется в хранилище сертификатов Windows с помощью такого средства, как оснастка диспетчера сертификатов консоли управления (MMC).

ms733836.note(ru-ru,VS.100).gifПримечание
Сертификат, полученный с использованием процедуры внешнего согласования, передается службе с помощью свойства ClientCredentials. Это необходимо при использовании класса BasicHttpBinding, поскольку привязка не допускает автоматического согласования. Это свойство также используется в случае некоррелированного дуплексного канала. В этом случае сервер отправляет клиенту сообщение, не ожидая поступления запроса от клиента. Так как сервер не получает запрос от клиента, он должен использовать для шифрования сообщения сертификат клиента.

Задание значений учетных данных

После выбора режима безопасности необходимо задать фактические значения учетных данных. Например, если типом учетных данных клиента является сертификат, необходимо связать со службой или клиентом определенный сертификат (например, определенный сертификат X.509).

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

Задание учетных данных службы

При использовании режима транспорта и HTTP в качестве транспорта нужно использовать службы IIS или настраивать порт с сертификатом. Дополнительные сведения см. в разделе Общие сведения о безопасности транспорта и Безопасность транспорта HTTP.

Для указания учетных данных для службы в коде создайте экземпляр класса ServiceHost и задайте соответствующие учетные данные с помощью класса ServiceCredentials, доступ к которому осуществляется через свойство Credentials.

Задание сертификата

Чтобы предоставить службе сертификат X.509 для проверки подлинности службы клиентами, используйте метод SetCertificate класса X509CertificateRecipientServiceCredential.

Чтобы предоставить службе сертификат клиента, используйте метод SetCertificate класса X509CertificateInitiatorServiceCredential.

Задание учетных данных Windows

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

Задание учетных данных клиента

В WCF клиентские приложения используют для подключения к службам клиент WCF. Все клиенты наследуются от класса ClientBase, а свойство ClientCredentials клиента позволяет устанавливать различные значения учетных данных клиента.

Задание сертификата

Чтобы предоставить службе сертификат X.509 для проверки подлинности клиента службой, используйте метод SetCertificate класса X509CertificateInitiatorClientCredential.

Использование учетных данных клиента при проверке подлинности клиента службой

Учетные данные клиента, необходимые для связи со службой, предоставляются с помощью свойства ClientCredentials или Credentials. Безопасный канал может использовать эту информацию для выполнения службой проверки подлинности клиента. Проверка подлинности выполняется в одном из двух режимов.

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

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

Невозможность изменения установленных идентификаций

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

ms733836.Important(ru-ru,VS.100).gif Примечание
Есть ситуация, в которой следует учитывать невозможность изменить идентификацию (то есть при поведении по умолчанию, когда включена установка контекста безопасности). При создании службы, подключающейся к другой службе, идентификацию, с помощью которой был открыт клиент WCF для второй службы, изменить нельзя. Это становится проблемой, если несколько клиентов могут использовать первую службу, а служба олицетворяет клиенты при доступе ко второй службе. Если служба использует для всех вызывающих один и тот же клиент, все вызовы ко второй службе происходят под идентификацией первого вызывающего, с помощью которой был открыт клиент для второй службы. Иными словами, служба использует идентификацию первого клиента для связи всех своих клиентов с другой службой. Это может привести к повышению привилегий. Если такое поведение службы нежелательно, нужно отслеживать каждого отдельного вызывающего и создавать для каждого из них новый клиент для второй службы. Следует убедиться, что служба использует для связи каждого вызывающего со второй службой только соответствующий клиент.

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

См. также

Справочник

System.ServiceModel.ClientBase
System.ServiceModel.ClientBase.ClientCredentials
System.ServiceModel.Description.ClientCredentials.ClientCertificate
System.ServiceModel.BasicHttpMessageSecurity.ClientCredentialType
System.ServiceModel.HttpTransportSecurity.ClientCredentialType
System.ServiceModel.MessageSecurityOverHttp.ClientCredentialType
System.ServiceModel.MessageSecurityOverMsmq.ClientCredentialType
System.ServiceModel.MessageSecurityOverTcp.ClientCredentialType
System.ServiceModel.TcpTransportSecurity.ClientCredentialType
System.ServiceModel.Security.X509CertificateInitiatorClientCredential.SetCertificate(System.Security.Cryptography.X509Certificates.StoreLocation,System.Security.Cryptography.X509Certificates.StoreName,System.Security.Cryptography.X509Certificates.X509FindType,System.Object)
System.ServiceModel.Security.X509CertificateInitiatorClientCredential.SetCertificate(System.String,System.Security.Cryptography.X509Certificates.StoreLocation,System.Security.Cryptography.X509Certificates.StoreName)
System.ServiceModel.Security.X509CertificateInitiatorServiceCredential.SetCertificate(System.String,System.Security.Cryptography.X509Certificates.StoreLocation,System.Security.Cryptography.X509Certificates.StoreName)

Основные понятия

Программирование безопасности WCF
Безопасность транспорта HTTP

Другие ресурсы

Основные понятия безопасности
Защита служб и клиентов