- Использование олицетворения при обеспечении безопасности транспорта Using Impersonation with Transport Security
- Пять уровней олицетворения Five Impersonation Levels
- Проблемы соответствия транспорта и олицетворения Transport-Specific Issues with Impersonation
- Транспорт именованных каналов Named Pipe Transport
- Транспорт HTTP HTTP Transport
- Уровни олицетворения
- Установка уровня олицетворения
Использование олицетворения при обеспечении безопасности транспорта Using Impersonation with Transport Security
Олицетворение — это способность серверного приложения принимать на себя удостоверение клиента. Impersonation is the ability of a server application to take on the identity of the client. Обычно службы используют олицетворение при проверке доступа к ресурсам. It is common for services to use impersonation when validating access to resources. Серверное приложение выполняется с использованием учетной записи службы, но когда сервер принимает клиентское подключение, он олицетворяет клиента для выполнения проверки доступа с использованием учетных данных клиента. The server application runs using a service account, but when the server accepts a client connection, it impersonates the client so that access checks are performed using the client’s credentials. Безопасность транспорта — это механизм, используемый как для передачи учетных данных, так и для обеспечения безопасности связи с использованием этих учетных данных. Transport security is a mechanism both for passing credentials and securing communication using those credentials. В этом разделе описывается использование безопасности транспорта в Windows Communication Foundation (WCF) с функцией олицетворения. This topic describes using transport security in Windows Communication Foundation (WCF) with the impersonation feature. Дополнительные сведения об олицетворении с использованием безопасности сообщений см. в разделе Делегирование и олицетворение. For more information about impersonation using message security, see Delegation and Impersonation.
Пять уровней олицетворения Five Impersonation Levels
В безопасности транспорта используется пять уровней олицетворения, как описано в приведенной ниже таблице. Transport security makes use of five levels of impersonation, as described in the following table.
Уровень олицетворения Impersonation level | Описание Description |
---|---|
None None | Серверное приложение не пытается олицетворить клиент. The server application does not attempt to impersonate the client. |
Анонимный Anonymous | Серверное приложение может выполнять проверки доступа с использованием учетных данных клиента, но не получает никакой информации об идентификации клиента. The server application can perform access checks against the client’s credentials, but does not receive any information about the client’s identity. Использовать этот уровень олицетворения имеет смысл только при обмене данными на компьютере, например по именованным каналам. This impersonation level is meaningful only for on-machine communication, such as named pipes. Если уровень Anonymous используется при удаленном подключении, он повышается до уровня олицетворения «Identify». Using Anonymous with a remote connection promotes the impersonation level to Identify. |
Identify Identify | Серверное приложение знает идентификацию клиента и может выполнить проверку доступа с использованием учетных данных клиента, но не может олицетворить клиент. The server application knows the client’s identity and can perform access validation against the client’s credentials, but cannot impersonate the client. Identify — это уровень олицетворения по умолчанию, используемый с учетными данными SSPI в WCF, если поставщик токенов не предоставляет другой уровень олицетворения. Identify is the default impersonation level used with SSPI credentials in WCF unless the token provider provides a different impersonation level. |
Impersonate Impersonate | Серверное приложение может получить доступ к ресурсам на компьютере-сервере в качестве клиента помимо выполнения проверок доступа. The server application can access resources on the server machine as the client in addition to performing access checks. Серверное приложение не может получить доступ к ресурсам на удаленных компьютерах, используя идентификацию клиента, поскольку олицетворяемый маркер не имеет сетевых учетных данных. The server application cannot access resources on remote machines using the client’s identity because the impersonated token does not have network credentials |
Делегат Delegate | Уровень олицетворения «Delegate» предоставляет те же возможности, что уровень Impersonate , а также позволяет серверному приложению получить доступ к ресурсам на удаленных компьютерах с использованием идентификации клиента и передавать эту идентификацию другим приложениям. In addition to having the same capabilities as Impersonate , the Delegate impersonation level also enables the server application to access resources on remote machines using the client’s identity and to pass the identity to other applications. Важно! Для использования этих дополнительных функций учетная запись домена сервера должна быть помечена как доверенная для делегирования на контроллере домена. Important The server domain account must be marked as trusted for delegation on the domain controller to use these additional features. Этот уровень олицетворения нельзя использовать с учетными записями домена клиента, отмеченными как конфиденциальные. This level of impersonation cannot be used with client domain accounts marked as sensitive. |
Уровни, наиболее часто используемые при обеспечении безопасности транспорта, — это Identify и Impersonate . The levels most commonly used with transport security are Identify and Impersonate . Не рекомендуется использовать уровни None и Anonymous в стандартных ситуациях, большинство транспортов не поддерживает использование этих уровней с проверкой подлинности. The levels None and Anonymous are not recommended for typical use, and many transports do not support using those levels with authentication. Уровень Delegate — это функция с широкими возможностями, которую следует использовать осторожно. The Delegate level is a powerful feature that should be used with care. Разрешение на делегирование учетных записей следует предоставлять только доверенным серверным приложениям. Only trusted server applications should be given the permission to delegate credentials.
Для использования уровней Impersonate или Delegate необходимо, чтобы серверные приложения имели привилегию SeImpersonatePrivilege . Using impersonation at the Impersonate or Delegate levels requires the server application to have the SeImpersonatePrivilege privilege. Приложение имеет эту привилегию по умолчанию, если оно выполняется от имени учетной записи в группе «Администраторы» или от имени учетной записи с идентификатором безопасности службы (сетевая служба, локальная служба или локальная система). An application has this privilege by default if it is running on an account in the Administrators group or on an account with a Service SID (Network Service, Local Service, or Local System). Для олицетворения не требуется проведения взаимной проверки подлинности клиента и сервера. Impersonation does not require mutual authentication of the client and server. Некоторые схемы проверки подлинности, поддерживающие олицетворение, такие как NTLM, нельзя использовать при проведении взаимной проверки подлинности. Some authentication schemes that support impersonation, such as NTLM, cannot be used with mutual authentication.
Проблемы соответствия транспорта и олицетворения Transport-Specific Issues with Impersonation
Выбор транспорта в WCF влияет на возможные варианты олицетворения. The choice of a transport in WCF affects the possible choices for impersonation. В этом разделе описываются проблемы, влияющие на стандартные транспорты HTTP и именованных каналов в WCF. This section describes issues affecting the standard HTTP and named pipe transports in WCF. Пользовательские транспорты имеют свои собственные ограничения поддержки олицетворения. Custom transports have their own restrictions on support for impersonation.
Транспорт именованных каналов Named Pipe Transport
К транспорту именованных каналов применяются следующие положения. The following items are used with the named pipe transport:
Транспорт именованных каналов предназначен для использования только на локальном компьютере. The named pipe transport is intended for use only on the local machine. Транспорт именованных каналов в WCF явным образом запрещает подключения между компьютерами. The named pipe transport in WCF explicitly disallows cross-machine connections.
Именованные каналы невозможно использовать с уровнем олицетворения Impersonate или Delegate . Named pipes cannot be used with the Impersonate or Delegate impersonation level. Именованный канал не может обеспечить выполнение гарантии на компьютере на этих уровнях олицетворения. The named pipe cannot enforce the on-machine guarantee at these impersonation levels.
Дополнительные сведения об именованных каналах см. в разделе Выбор транспорта. For more information about named pipes, see Choosing a Transport.
Транспорт HTTP HTTP Transport
Привязки, использующие транспорт HTTP ( WSHttpBinding и BasicHttpBinding ), поддерживают несколько схем проверки подлинности, как описано в описании проверки подлинности HTTP. The bindings that use the HTTP transport (WSHttpBinding and BasicHttpBinding) support several authentication schemes, as explained in Understanding HTTP Authentication. Поддерживаемый уровень олицетворения зависит от схемы проверки подлинности. The impersonation level supported depends on the authentication scheme. К транспорту HTTP применяются следующие положения. The following items are used with the HTTP transport:
Схема проверки подлинности Anonymous игнорирует олицетворение. The Anonymous authentication scheme ignores impersonation.
Basic Схема проверки подлинности поддерживает только Delegate уровень. The Basic authentication scheme supports only the Delegate level. Все более низкие уровни олицетворения обновляются. All lower impersonation levels are upgraded.
Схема проверки подлинности Digest поддерживает только уровни Impersonate и Delegate . The Digest authentication scheme supports only the Impersonate and Delegate levels.
Схема проверки подлинности NTLM , которую можно выбрать как прямо, так и посредством согласования, поддерживает только уровень Delegate на локальном компьютере. The NTLM authentication scheme, selectable either directly or through negotiation, supports only the Delegate level on the local machine.
Схема проверки подлинности Kerberos, которую можно выбрать только посредством согласования, используется на любом поддерживаемом уровне олицетворения. The Kerberos authentication scheme, which can only be selected through negotiation, can be used with any supported impersonation level.
Дополнительные сведения о транспорте HTTP см. в разделе Выбор транспорта. For more information about the HTTP transport, see Choosing a Transport.
Уровни олицетворения
Если олицетворение завершилось успешно, это означает, что клиент принял согласие на то, чтобы сервер был клиентом в некоторой степени. Различные степени олицетворения называются уровнями олицетворения, и они указывают, сколько полномочий предоставляется серверу при олицетворении клиента.
В настоящее время существует четыре уровня олицетворения: анонимные, выявление, олицетворение и Делегирование. В следующем списке кратко описан каждый уровень олицетворения.
Анонимный ( _ _ _ Анонимный уровень RPC C _ )
Клиент анонимен по отношению к серверу. Серверный процесс может олицетворять клиента, но маркер олицетворения не содержит никакой информации о клиенте. Этот уровень поддерживается только для локального межпроцессного транспорта взаимодействия. Все остальные транспорты продают автоматическую роль этого уровня для распознавания.
Identify ( _ Обнаружение на _ _ уровне _ идентификаторов RPC C)
Уровень, установленный в системе по умолчанию. Сервер может получать удостоверение клиента и олицетворять клиента, чтобы производить проверки списка управления доступом (ACL).
олицетворять ( _ _ _ олицетворение на уровне RPC C _ )
Сервер может олицетворять контекст безопасности клиента, пока действует от его лица. Сервер может получать доступ к локальным ресурсам в качестве клиента. Если сервер является локальным, он может получить доступ к сетевым ресурсам в качестве клиента. Если сервер является удаленным, он может получить доступ только к тем ресурсам, которые находятся на том же компьютере, что и сервер.
Delegate ( _ _ делегат уровня Imp RPC C _ _ )
Самый высокий уровень олицетворения. Когда выбран этот уровень, сервер (локальный или удаленный) может олицетворять контекст безопасности клиента, пока действует от его лица. Во время олицетворения учетные данные клиента (как локальных, так и сетевых) могут быть переданы на любое количество компьютеров.
Чтобы олицетворение работало на уровне делегата, должны выполняться следующие требования.
- Клиент должен задать уровень олицетворения _ _ _ делегата уровня «RPC C» _ .
- Учетная запись клиента не должна быть помечена как «учетная запись является конфиденциальной и не может быть делегирована» в службе Active Directory.
- Учетная запись сервера должна быть помечена атрибутом «доверенный для делегирования» в службе Active Directory.
- Компьютеры, на которых размещается клиент, сервер и все нижестоящие серверы, должны работать в домене.
Выбирая уровень олицетворения, клиент сообщает серверу, насколько далеко он может пройти через олицетворение клиента. Клиент устанавливает уровень олицетворения для прокси-сервера, который он использует для взаимодействия с сервером.
Установка уровня олицетворения
Задать уровень олицетворения можно двумя способами:
- Клиент может задать процессвиде с помощью вызова CoInitializeSecurity.
- Клиент может установить безопасность на уровне прокси-сервера для интерфейса удаленного объекта с помощью вызова иклиентсекурити:: сетбланкет (или вспомогательной функции CoSetProxyBlanket).
Уровень олицетворения задается путем передачи соответствующего значения «The RPC _ C _ «-Imp _ _ «XXX» в CoInitializeSecurity или CoSetProxyBlanket с помощью параметра двимплевел .
Разные службы проверки подлинности поддерживают олицетворение на уровне делегата в различных экстентах. Например, поставщик NTLMSSP поддерживает олицетворение на уровне делегата между потоками и между процессами, но не между компьютерами. С другой стороны, протокол Kerberos поддерживает олицетворение на уровне делегата на границах компьютеров, а SChannel не поддерживает олицетворение на уровне делегата. Если у вас есть прокси-сервер на уровне олицетворения, и вы хотите задать для уровня олицетворения значение Delegate, следует вызвать сетбланкет , используя константы по умолчанию для каждого параметра, кроме уровня олицетворения. COM выберет NTLM локально и протокол Kerberos удаленно (когда будет работать протокол Kerberos).