ダイジェスト アクセス プロトコル
RFC 2617 で指定されたダイジェスト アクセス プロトコルは、Microsoft Digest セキュリティ サポート プロバイダー (SSP) によって実装されます。 実装は、クライアント/サーバー アプリケーションが呼び出す一連の Microsoft セキュリティ サポート プロバイダー インターフェイス (SSPI) セキュリティ コンテキスト関数で構成されます。
- メッセージ交換の セキュリティ コンテキスト を確立します。
- ダイジェスト SSP に必要なデータ オブジェクト (資格情報やコンテキスト ハンドルなど) を 取得します。
- メッセージ の整合性 と機密性のメカニズムにアクセスします。
ダイジェスト アクセス認証は、ペアの要求/応答トランザクション内で行われ、要求はクライアントで送信され、応答はサーバー上で送信されます。 ダイジェスト アクセス認証が成功するには、2 つの要求と応答のペアが必要です。
ダイジェスト SSP を HTTP 認証に使用する場合、最初と 2 番目の要求/応答ペアの間に接続は維持されません。 つまり、サーバーは最初の応答を送信した後、2 番目の要求を待機しません。
次の図は、ダイジェスト SSP を使用して認証を完了するためにクライアントとサーバーによって HTTP パスに対して実行される手順を示しています。 SASL メカニズムでは相互認証が使用されるため、認証データは、クライアントが正しいサーバーと通信していることを確認する最後の ASC サーバー呼び出しでクライアントに送り返されます。
このプロセスは、HTTP 要求 1 を送信することで、アクセス保護されたリソースをサーバーに要求するクライアントから始まります。
サーバーは HTTP 要求 1 を受け取り、要求に含まれていない認証情報がリソースに必要であると判断します。 サーバーは、次のようにクライアントに対してチャレンジを生成します。
- サーバーは AcquireCredentialsHandle 関数を呼び出して資格情報を取得します。
- サーバーは AcceptSecurityContext (General) 関数を呼び出してダイジェスト チャレンジを生成します。
- サーバーは、クライアントの要求に対する応答としてWWW-Authenticate ヘッダーを送信します (HTTP 応答 1 として表示)。 ヘッダーには、ダイジェスト チャレンジと、クライアント用に確立された部分的な セキュリティ コンテキスト への参照を含む不透明なディレクティブが含まれています。 ヘッダーは、クライアント要求が未承認のアクセス エラーを生成したことを示す 401 状態コードで送信されます。 ダイジェストチャレンジの詳細については、「ダイジェストチャレンジの内容」および「ダイジェストチャレンジの生成」を参照してください。
- クライアントは HTTP 応答 1 を受け取り、サーバーによって送信されたダイジェスト チャレンジを抽出し、次のようにダイジェスト チャレンジ応答を生成します。
- ユーザーの資格情報は、 AcquireCredentialsHandle 関数を呼び出すか、ユーザーに資格情報の入力を対話形式で求めることで取得されます。
- チャレンジと資格情報の情報は InitializeSecurityContext (General) 関数に渡され、ダイジェスト チャレンジ応答が生成されます。
- クライアントは、チャレンジ応答を含む Authorization ヘッダーをサーバーに送信します (HTTP 要求 2 と表示)。 ダイジェスト チャレンジ応答の詳細については、「ダイジェスト チャレンジ応答の内容」および「ダイジェスト チャレンジ応答の生成」を参照してください。
- サーバーは HTTP 要求 2 を受信し、クライアントから送信されたチャレンジ応答を抽出し、 AcceptSecurityContext (General) 関数を呼び出して情報を認証します。 認証プロセスの詳細については、「 Microsoft Digest を使用した初期認証」を参照してください。
- サーバーは、ダイジェスト アクセス プロトコルで必要な 2 番目と最後の応答として HTTP 応答 2 をクライアントに送信します。 認証が成功した場合、この応答には要求されたリソースが含まれます。
関連トピック