Функция ImpersonateSecurityContext (sspi.h)
Функция ImpersonateSecurityContext позволяет серверу олицетворять клиента с помощью маркера, ранее полученного при вызове AcceptSecurityContext (General) или QuerySecurityContextToken. Эта функция позволяет серверу приложений действовать в качестве клиента, поэтому применяются все необходимые элементы управления доступом.
Синтаксис
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(
[in] PCtxtHandle phContext
);
Параметры
[in] phContext
Дескриптор контекста для олицетворения. Этот дескриптор должен быть получен путем вызова функции AcceptSecurityContext (General).
Возвращаемое значение
Если функция завершается успешно, функция возвращает SEC_E_OK.
Если функция завершается сбоем, она возвращает следующий код ошибки.
Код возврата | Описание |
---|---|
|
Дескриптор, переданный функции, недопустим. |
|
Не удалось олицетворить клиента. |
|
Это значение возвращается режимом ядра Schannel, чтобы указать, что эта функция не поддерживается. |
Комментарии
Серверное приложение вызывает функцию ImpersonateSecurityContext , когда ему необходимо олицетворять клиента. Перед этим сервер должен получить допустимый дескриптор контекста. Чтобы получить дескриптор контекста, сервер должен вызвать AcceptSecurityContext (General) для отправки входящего маркера безопасности клиента в систему безопасности. Сервер получает дескриптор контекста, если входящий контекст проверен. Функция создает маркер олицетворения и позволяет потоку или процессу выполняться с контекстом олицетворения.
При использовании поставщика поддержки безопасности Schannel серверное приложение должно передать флаг ASC_REQ_MUTUAL_AUTH при вызове AcceptSecurityContext (General) . Это гарантирует, что клиент будет запрашивать сертификат клиента во время подтверждения SSL/TLS. При получении сертификата клиента пакет Schannel проверяет сертификат клиента и пытается сопоставить его с учетной записью пользователя. При успешном сопоставлении создается маркер пользователя клиента, и эта функция завершается успешно.
Сервер приложений должен вызывать функцию RevertSecurityContext по завершении или при необходимости восстановления собственного контекста безопасности.
ImpersonateSecurityContext доступен не для всех пакетов безопасности на всех платформах. Как правило, он реализуется только на платформах и с пакетами безопасности, поддерживающими олицетворение. Чтобы узнать, поддерживает ли пакет безопасности олицетворение, вызовите функцию QuerySecurityPackageInfo .
- Запрошенный уровень олицетворения маркера меньше, чем SecurityImpersonation, например SecurityIdentification или SecurityAnonymous.
- Вызывающий объект имеет привилегию SeImpersonatePrivilege .
- Процесс (или другой процесс в сеансе входа в вызывающий объект) создал маркер, используя явные учетные данные с помощью функции LogonUser или LsaLogonUser .
- Удостоверение, прошедшее проверку подлинности, совпадает с вызывающим.
Windows XP: Привилегия SeImpersonatePrivilege не поддерживается до windows XP с пакетом обновления 2 (SP2).
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | sspi.h (включая Security.h) |
Библиотека | Secur32.lib |
DLL | Secur32.dll |