impersonateSecurityCoNtext 函式 (sspi.h)

ImpersonateSecurityCoNtext函式可讓伺服器使用先前透過呼叫AcceptSecurityCoNtext 取得的權杖來模擬用戶端, (General) QuerySecurityCoNtextToken。 此函式可讓應用程式伺服器做為用戶端,因此會強制執行所有必要的存取控制。

語法

KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(
  [in] PCtxtHandle phContext
);

參數

[in] phContext

要模擬之內容的控制碼。 呼叫 AcceptSecurityCoNtext (General) 函式時,必須取得此控制碼。

傳回值

如果函式成功,函式會傳回SEC_E_OK。

如果函式失敗,它會傳回下列錯誤碼。

傳回碼 描述
SEC_E_INVALID_HANDLE
傳遞至函式的控制碼無效。
SEC_E_NO_IMPERSONATION
無法模擬用戶端。
SEC_E_UNSUPPORTED_FUNCTION
這個值是由安全通道核心模式傳回,表示不支援此函式。

備註

伺服器應用程式需要模擬用戶端時,會呼叫 ImpersonateSecurityCoNtext 函式。 這麼做之前,伺服器必須已取得有效的內容控制碼。 若要取得內容控制碼,伺服器必須呼叫 AcceptSecurityCoNtext (General) ,才能將用戶端的傳入安全性權杖提交至安全性系統。 如果驗證輸入內容,伺服器就會取得內容控制碼。 函式會建立 模擬權杖 ,並允許執行緒或進程使用模擬內容來執行。

使用安全通道安全性支援提供者 (SSP) 時,伺服器應用程式必須在呼叫AcceptSecurityCoNtext (General) 時傳遞ASC_REQ_MUTUAL_AUTH旗標。 這可確保用戶端在 SSL/TLS 交握期間要求用戶端憑證。 收到用戶端憑證時,安全通道套件會驗證用戶端憑證,並嘗試將其對應至使用者帳戶。 當此對應成功時,就會建立用戶端使用者權杖,且此函式會成功。

當應用程式伺服器完成或需要還原自己的安全性內容時,應用程式伺服器必須呼叫RevertSecurityCoNtext函式。

ImpersonateSecurityCoNtext 不適用於所有平臺上的所有 安全性套件 。 一般而言,它只會在支援模擬的平臺和安全性套件上實作。 若要瞭解安全性套件是否支援模擬,請呼叫 QuerySecurityPackageInfo 函 式。

注意 如果 ImpersonateSecurityCoNtext 函式失敗,則不會模擬用戶端,而且所有後續用戶端要求都會在呼叫函式的進程安全性內容中進行。 如果呼叫進程是以特殊許可權帳戶執行,它可以執行不允許用戶端執行的動作。 為了避免安全性風險,呼叫進程應該一律檢查傳回值。 如果傳回值指出函式呼叫失敗,則不應該執行任何用戶端要求。
 
所有模擬函式,包括 ImpersonateSecurityCoNtext ,如果下列其中一項成立,則允許要求的模擬:
  • 要求的權杖模擬層級小於 SecurityImpersonation,例如 SecurityIdentificationSecurityAnonymous
  • 呼叫端具有 SeImpersonatePrivilege 許可權。
  • 呼叫端登入會話中的進程 (或其他進程,) 透過 LogonUserLsaLogonUser 函式使用明確認證來建立權杖。
  • 已驗證的身分識別與呼叫端相同。
Windows XP 與 SP1 和更早版本: 不支援 SeImpersonatePrivilege 許可權。

Windowsxp: 在 Windows XP Service Pack 2 (SP2) 之前,不支援 SeImpersonatePrivilege 許可權。

需求

   
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
目標平台 Windows
標頭 sspi.h (包含 Security.h)
程式庫 Secur32.lib
Dll Secur32.dll

另請參閱

AcceptSecurityCoNtext (一般)

QuerySecurityPackageInfo

RevertSecurityCoNtext

SSPI 函式