Уровни олицетворения (авторизация)

Перечисление SECURITY_IMPERSONATION_LEVEL определяет четыре уровня олицетворения, которые определяют операции, которые сервер может выполнять в контексте клиента.

Уровень олицетворения Описание
SecurityAnonymous Сервер не может олицетворить или идентифицировать клиента.
SecurityIdentification Сервер может получить удостоверение и привилегии клиента, но не может олицетворять клиента.
SecurityImpersonation Сервер может олицетворять контекст безопасности клиента в локальной системе.
SecurityDelegation Сервер может олицетворять контекст безопасности клиента в удаленных системах.

 

Клиент именованного канала, RPC или подключения DDE может управлять уровнем олицетворения. Например, клиент именованного канала может вызвать функцию CreateFile , чтобы открыть дескриптор именованного канала и указать уровень олицетворения сервера.

Если именованный канал, RPC или DDE-подключение является удаленным, флаги, передаваемые в CreateFile для задания уровня олицетворения, игнорируются. В этом случае уровень олицетворения клиента определяется уровнями олицетворения, включенными сервером, который устанавливается флагом в учетной записи сервера в службе каталогов. Например, если сервер включен для делегирования, уровень олицетворения клиента также будет установлен на делегирование, даже если флаги, переданные в CreateFile , указывают уровень олицетворения идентификации.

Клиенты DDE используют функцию DdeSetQualityOfService со структурой SECURITY_QUALITY_OF_SERVICE для указания уровня олицетворения. Уровень SecurityImpersonation используется по умолчанию для именованных каналов, RPC и серверов DDE. Функции ImpersonateSelf, DuplicateToken и DuplicateTokenEx позволяют вызывающей объекту указать уровень олицетворения. Используйте функцию GetTokenInformation для получения уровня олицетворения маркера доступа.

На уровне SecurityImpersonation большинство действий потока выполняются в контексте безопасности маркера олицетворения потока, а не в основном маркерепроцесса , которому принадлежит поток. Например, если олицетворение потока открывает защищаемый объект, система использует маркер олицетворения для проверка доступа к потоку. Аналогичным образом, если олицетворение потока создает новый объект, например путем вызова функции CreateFile , владелец нового объекта является владельцем по умолчанию из маркера доступа клиента.

Однако система использует основной маркер процесса, а не токен олицетворения вызывающего потока в следующих ситуациях:

  • Если олицетворение потока вызывает функцию CreateProcess , новый процесс всегда наследует основной токен процесса.
  • Для функций, требующих привилегии SE_TCB_NAME, таких как функция LogonUser , система всегда проверяет наличие привилегии в основном маркере процесса.
  • Для функций, требующих привилегии SE_AUDIT_NAME, таких как функция ObjectOpenAuditAlarm , система всегда проверяет наличие привилегий в основном маркере процесса.
  • При вызове функции OpenThreadToken поток может указать, использует ли функция маркер олицетворения или основной маркер, чтобы определить, следует ли предоставить запрошенный доступ.