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 安全支持提供程序 (SSP) 时,服务器应用程序必须在调用 AcceptSecurityContext (General) 时传递 ASC_REQ_MUTUAL_AUTH 标志。 这可确保在 SSL/TLS 握手期间要求客户端提供客户端证书。 收到客户端证书后,Schannel 包会验证客户端证书,并尝试将其映射到用户帐户。 如果此映射成功,则会创建客户端用户令牌,并且此函数成功。
应用程序服务器必须在完成或需要还原自己的安全上下文时调用 RevertSecurityContext 函数。
ImpersonateSecurityContext 不适用于所有平台上的所有 安全包 。 通常,它仅在平台和支持模拟的安全包上实现。 若要了解安全包是否支持模拟,请调用 QuerySecurityPackageInfo 函数。
- 请求的令牌模拟级别小于 SecurityImpersonation,例如 SecurityIdentification 或 SecurityAnonymous。
- 调用方具有 SeImpersonatePrivilege 特权。
- 调用方登录会话中的进程 (或另一个进程) 通过 LogonUser 或 LsaLogonUser 函数使用显式凭据创建令牌。
- 经过身份验证的标识与调用方相同。
Windowsxp: 在 Windows XP service Pack 2 (SP2) 之前,不支持 SeImpersonatePrivilege 特权。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | sspi.h (包括 Security.h) |
Library | Secur32.lib |
DLL | Secur32.dll |