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 関数を呼び出します。
- トークンの要求された偽装レベルは、SecurityIdentification や SecurityAnonymous など、SecurityImpersonation よりも小さくなります。
- 呼び出し元には SeImpersonatePrivilege 特権があります。
- プロセス (または呼び出し元のログオン セッション内の別のプロセス) によって、 LogonUser または LsaLogonUser 関数を介して明示的な資格情報を使用してトークンが作成されました。
- 認証された ID は呼び出し元と同じです。
Windows XP: SeImpersonatePrivilege 特権は、Service Pack 2 (SP2) を使用した Windows XP までサポートされていません。
要件
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | sspi.h (Security.h を含む) |
Library | Secur32.lib |
[DLL] | Secur32.dll |