Уровни олицетворения

Если олицетворение завершается успешно, это означает, что клиент согласился позволить серверу быть клиентом в некоторой степени. Различные степени олицетворения называются уровнями олицетворения, и они указывают, сколько полномочий предоставляется серверу при олицетворении клиента.

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

анонимный (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.
  • Компьютеры, на которых размещается клиент, сервер и все серверы нижестоящего сервера, должны работать в домене.

Выбрав уровень олицетворения, клиент сообщает серверу, насколько он может идти в олицетворении клиента. Клиент задает уровень олицетворения на прокси-сервере, который он использует для взаимодействия с сервером.

Настройка уровня олицетворения

Существует два способа задать уровень олицетворения:

Вы задаете уровень олицетворения путем передачи соответствующего значения RPC_C_IMP_LEVEL_xxx в CoInitializeSecurity или CoSetProxyBlanket через параметр dwImpLevel.

Различные службы проверки подлинности поддерживают олицетворение на уровне делегатов в разных уровнях. Например, NTLMSSP поддерживает межпоточное и межпроцессное олицетворение на уровне делегата, но не между компьютерами. С другой стороны, протокол Kerberos поддерживает олицетворение уровня делегата через границы компьютера, в то время как Schannel не поддерживает олицетворение на уровне делегата. Если у вас есть прокси-сервер на уровне олицетворения и вы хотите задать уровень олицетворения делегатом, необходимо вызвать SetBlanket с помощью констант по умолчанию для каждого параметра, кроме уровня олицетворения. COM выбирает NTLM локально и протокол Kerberos удаленно (когда будет работать протокол Kerberos).

Делегирование и олицетворение