AcceptSecurityContext 関数 (sspi.h)
AcceptSecurityContext (CredSSP) 関数を使用すると、トランスポート アプリケーションのサーバー コンポーネントは、サーバーとリモート クライアントの間にセキュリティ コンテキストを確立できます。 リモート クライアントは InitializeSecurityContext (CredSSP) 関数を呼び出して、セキュリティ コンテキストを確立するプロセスを開始します。 サーバーは、セキュリティ コンテキストの確立を完了するために、リモート クライアントから 1 つ以上の応答トークンを要求できます。
構文
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AcceptSecurityContext(
[in, optional] PCredHandle phCredential,
[in, optional] PCtxtHandle phContext,
[in, optional] PSecBufferDesc pInput,
[in] unsigned long fContextReq,
[in] unsigned long TargetDataRep,
[in, out, optional] PCtxtHandle phNewContext,
[in, out, optional] PSecBufferDesc pOutput,
[out] unsigned long *pfContextAttr,
[out, optional] PTimeStamp ptsExpiry
);
パラメーター
[in, optional] phCredential
サーバー資格情報へのハンドル。 このハンドルを取得するために、サーバーは、SECPKG_CRED_INBOUNDまたはSECPKG_CRED_BOTH フラグセットを使用して AcquireCredentialsHandle (CredSSP) 関数を呼び出します。
[in, optional] phContext
CtxtHandle 構造体へのポインター。 AcceptSecurityContext (CredSSP) の最初の呼び出しでは、このポインターは NULL です。 後続の呼び出しでは、 phContext は、最初の呼び出しによって phNewContext パラメーターで返される部分形式のコンテキストを指定します。
[in, optional] pInput
InitializeSecurityContext (CredSSP) のクライアント呼び出しによって生成される SecBufferDesc 構造体へのポインター。 構造体には、入力バッファー記述子が含まれています。
最初のバッファーは SECBUFFER_TOKEN 型で、クライアントから受信したセキュリティ トークンを含んでいる必要があります。 2 番目のバッファーは SECBUFFER_EMPTY 型である必要があります。
[in] fContextReq
コンテキストを確立するためにサーバーに必要な属性を指定するビット フラグ。 ビット フラグは、ビットごとの OR 演算を使用して結合できます。 このパラメーターには、次の 1 つ以上の値を指定できます。
値 | 説明 |
---|---|
|
資格情報セキュリティ サポート プロバイダー (CredSSP) は、出力バッファーを割り当てます。 出力バッファーの使用が完了したら、 FreeContextBuffer 関数を呼び出して解放します。 |
|
セキュリティ コンテキストでは、書式設定メッセージは処理されません。 |
|
サーバーは、クライアントの偽装を許可されます。 制約付き委任の場合は、このフラグを無視します。 |
|
エラーが発生すると、リモート パーティに通知されます。 |
|
再生されたパケットを検出します。 |
|
受信したメッセージを順番に検出します。 |
|
ストリーム指向接続をサポートします。 |
使用できる属性フラグとその意味については、「 コンテキストの要件」を参照してください。 このパラメーターに使用されるフラグの前には、ASC_REQ (たとえば、ASC_REQ_DELEGATE) が付けられます。
要求された属性は、クライアントでサポートされていない可能性があります。 詳細については、 pfContextAttr パラメーターを参照してください。
[in] TargetDataRep
ターゲットのデータ表現 (バイト順序など)。 このパラメーターには、 SECURITY_NATIVE_DREP または SECURITY_NETWORK_DREPを指定できます。
[in, out, optional] phNewContext
CtxtHandle 構造体へのポインター。 AcceptSecurityContext (CredSSP) の最初の呼び出しで、このポインターは新しいコンテキスト ハンドルを受け取ります。 後続の呼び出しでは、 phNewContext は phContext パラメーターで指定されたハンドルと同じにすることができます。
[in, out, optional] pOutput
出力バッファー記述子を含む SecBufferDesc 構造体へのポインター。 このバッファーは、 InitializeSecurityContext (CredSSP) への追加呼び出しへの入力のためにクライアントに送信されます。 関数がSEC_E_OKを返した場合でも、出力バッファーが生成される場合があります。 生成されたバッファーは、クライアント アプリケーションに返送する必要があります。
出力時に、このバッファーはセキュリティ コンテキストのトークンを受け取ります。 トークンはクライアントに送信する必要があります。 関数は、SECBUFFER_EXTRA型のバッファーを返すこともできます。
[out] pfContextAttr
確立されたコンテキストの属性を示すビット フラグのセットへのポインター。 さまざまな属性の説明については、「 コンテキスト要件」を参照してください。 このパラメーターに使用されるフラグの前には、ASC_RET (たとえば、ASC_RET_DELEGATE) が付けられます。
最後の関数呼び出しが正常に返されるまで、セキュリティ関連の属性をチェックしないでください。 セキュリティに関連しない属性フラグ (ASC_RET_ALLOCATED_MEMORY フラグなど) は、最終的な戻り値の前に確認できます。
[out, optional] ptsExpiry
コンテキストの有効期限を受け取る TimeStamp 構造体へのポインター。 セキュリティ パッケージでは、常にローカル時刻にこの値を返すようにお勧めします。
戻り値
この関数は、次のいずれかの値を返します。
リターン コード/値 | Description |
---|---|
|
関数が正常に実行されました。 入力バッファー内のデータが不完全です。 アプリケーションは、クライアントから追加のデータを読み取り、 AcceptSecurityContext (CredSSP) をもう一度呼び出す必要があります。 |
|
関数が失敗しました。 要求されたアクションを完了するのに十分なメモリがありません。 |
|
関数が失敗しました。 SSPI エラー コードにマップされないエラーが発生しました。 |
|
関数が失敗しました。 関数に渡されたハンドルが無効です。 |
|
関数が失敗しました。 関数に渡されたトークンが無効です。 |
|
ログオンに失敗しました。 |
|
関数が失敗しました。 認証のために機関に連絡できませんでした。 これは、次の条件が原因である可能性があります。
|
|
関数が失敗しました。 phCredential パラメーターで指定された資格情報ハンドルが無効です。 |
|
関数が正常に実行されました。 クライアントから受信したセキュリティ コンテキストが受け入れられました。 関数が出力トークンを生成した場合は、トークンをクライアント プロセスに送信する必要があります。 |
|
関数が失敗しました。 fContextReq パラメーターは、無効なコンテキスト属性フラグ (ASC_REQ_DELEGATEまたはASC_REQ_PROMPT_FOR_CREDS) を指定しました。 |
|
関数が正常に実行されました。 サーバーは CompleteAuthToken を 呼び出し、出力トークンをクライアントに渡す必要があります。 サーバーは、 AcceptSecurityContext (CredSSP) を別の呼び出しを行う前に、クライアントからの戻りトークンを待機する必要があります。 |
|
関数が正常に実行されました。 CompleteAuthToken を呼び出す前に、サーバーはクライアントからのメッセージの作成を完了する必要があります。 |
|
関数が正常に実行されました。 サーバーは出力トークンをクライアントに送信し、返されたトークンを待機する必要があります。 返されたトークンは、AcceptSecurityContext (CredSSP) への別の呼び出しのために pInput で渡す必要があります。 |
解説
AcceptSecurityContext (CredSSP) 関数は、InitializeSecurityContext (CredSSP) 関数に対応するサーバーです。
サーバーは、クライアントから要求を受信すると、 fContextReq パラメーターを使用してセッションに必要なものを指定します。 この方法では、サーバーは、クライアントが機密または 整合性チェックされたセッションを使用できるようにする必要があります。その要求を満たすことができないクライアントを拒否できます。 または、サーバーには何も必要ありません。クライアントが必要とするもの、または指定できる内容は、 pfContextAttr パラメーターで返されます。
fContextReq パラメーターと pfContextAttr パラメーターは、さまざまなコンテキスト属性を表すビットマスクです。 さまざまな属性の説明については、「 コンテキスト要件」を参照してください。
セキュリティ コンテキストが確立されると、サーバー アプリケーションは QuerySecurityContextToken 関数を使用して、クライアント証明書がマップされたユーザー アカウントへのハンドルを取得できます。 また、サーバーは ImpersonateSecurityContext 関数を使用してユーザーを偽装できます。
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | sspi.h (Security.h を含む) |
Library | Secur32.lib |
[DLL] | Secur32.dll |