Уровни олицетворения
Если олицетворение завершается успешно, это означает, что клиент согласился позволить серверу быть клиентом в некоторой степени. Различные степени олицетворения называются уровнях олицетворения, и указывают, сколько полномочий предоставляется серверу при олицетворении клиента.
В настоящее время существует четыре уровня олицетворения: анонимные, определить, олицетворениеи делегата. В следующем списке кратко описывается каждый уровень олицетворения:
-
анонимные (RPC_C_IMP_LEVEL_ANONYMOUS)
-
Клиент является анонимным на сервере. Серверный процесс может олицетворить клиента, но маркер олицетворения не содержит никаких сведений о клиенте. Этот уровень поддерживается только через локальный межпроцессный транспорт связи. Все остальные транспорты безмолвно повышают этот уровень для выявления.
-
идентификации (RPC_C_IMP_LEVEL_IDENTIFY)
-
Системный уровень по умолчанию. Сервер может получить удостоверение клиента, и сервер может олицетворить клиента для выполнения проверок ACL.
-
олицетворения (RPC_C_IMP_LEVEL_IMPERSONATE)
-
Сервер может олицетворить контекст безопасности клиента при выполнении от имени клиента. Сервер может получить доступ к локальным ресурсам в качестве клиента. Если сервер является локальным, он может получить доступ к сетевым ресурсам в качестве клиента. Если сервер удален, он может получить доступ только к ресурсам, которые находятся на том же компьютере, что и сервер.
-
делегат (RPC_C_IMP_LEVEL_DELEGATE)
-
Самый мощный уровень олицетворения. При выборе этого уровня сервер (локальный или удаленный) может олицетворить контекст безопасности клиента при действии от имени клиента. Во время олицетворения учетные данные клиента (как локальные, так и сетевые) можно передавать на любое количество компьютеров.
Чтобы олицетворение работало на уровне делегата, необходимо выполнить следующие требования:
- Клиент должен задать уровень олицетворения RPC_C_IMP_LEVEL_DELEGATE.
- Учетная запись клиента не должна быть помечена как "Учетная запись является конфиденциальной и не может быть делегирована" в службе Active Directory.
- Учетная запись сервера должна быть помечена атрибутом "Доверенный для делегирования" в службе Active Directory.
- Компьютеры, на которых размещается клиент, сервер и все серверы нижестоящего сервера, должны работать в домене.
Выбрав уровень олицетворения, клиент сообщает серверу, насколько он может идти в олицетворении клиента. Клиент задает уровень олицетворения на прокси-сервере, который он использует для взаимодействия с сервером.
Настройка уровня олицетворения
Существует два способа задать уровень олицетворения:
- Клиент может настроить его по всей процедуре с помощью вызова CoInitializeSecurity.
- Клиент может настроить безопасность на уровне прокси-сервера в интерфейсе удаленного объекта с помощью вызова IClientSecurity::SetBlanket (или вспомогательной функции CoSetProxyBlanket).
Вы задаете уровень олицетворения, передав соответствующее значение RPC_C_IMP_LEVEL_xxx CoInitializeSecurity или CoSetProxyBlanket через параметр dwImpLevel.
Различные службы проверки подлинности поддерживают олицетворение на уровне делегатов в разных уровнях. Например, NTLMSSP поддерживает межпоточное и межпроцессное олицетворение на уровне делегата, но не между компьютерами. С другой стороны, протокол Kerberos поддерживает олицетворение уровня делегата через границы компьютера, в то время как Schannel не поддерживает олицетворение на уровне делегата. Если у вас есть прокси-сервер на уровне олицетворения и вы хотите задать уровень олицетворения делегатом, необходимо вызвать SetBlanket с помощью констант по умолчанию для каждого параметра, кроме уровня олицетворения. COM выбирает NTLM локально и протокол Kerberos удаленно (когда будет работать протокол Kerberos).
Связанные разделы