ダイジェスト認証とは何ですか? 質問する

ダイジェスト認証とは何ですか? 質問する

資格情報をプレーンテキストとして送信すること以外に、ダイジェスト認証は基本認証とどう違うのでしょうか?

ベストアンサー1

主な違いは、ユーザー名とパスワードをプレーンテキストでネットワーク経由で送信する必要がないことです。また、サーバーからのワンタイム番号を使用するため、リプレイ攻撃の影響を受けません。

サーバーはクライアントに、ユーザー名、レルム、パスワード、および URI リクエストと組み合わせる 1 回限りの使用番号 (nonce) を提供します。クライアントは、これらのフィールドすべてを MD5 ハッシュ メソッドで実行して、ハッシュ キーを生成します。

このハッシュ キーは、ユーザー名と領域とともにサーバーに送信され、認証が試行されます。

サーバー側では、同じ方法を使用してハッシュキーを生成しますが、ブラウザに入力されたパスワードを使用する代わりに、サーバーはユーザー DB からユーザーの予想されるパスワードを検索します。サーバーは、このユーザー名の保存されたパスワードを検索し、同じアルゴリズムを実行して、クライアントが送信したものと比較します。一致した場合はアクセスが許可され、一致しない場合は、401 Unauthorized (ログインなしまたはログイン失敗) または 403 Forbidden (アクセス拒否) を返します。

ダイジェスト認証はRFC2617で標準化。 ありますWikipediaに素晴らしい概要があります:

次のように考えることができます。

  1. クライアントがリクエストする
  2. クライアントはサーバーからノンスと401認証リクエストを受け取ります。
  3. クライアントは次の応答配列 (username, realm, generate_md5_key(nonce, username, realm, URI, password_given_by_user_to_browser)) を返します (はい、これは非常に簡略化されています)
  4. サーバーはユーザー名とレルムを受け取り(さらにクライアントが要求している URI も知っています)、そのユーザー名のパスワードを検索します。次に、generate_md5_key(nonce, username, realm, URI, password_I_have_for_this_user_in_my_db) の独自バージョンを実行します。
  5. 取得した generate_md5() の出力とクライアントが送信した出力を比較し、一致する場合はクライアントが送信したパスワードが正しいことになります。一致しない場合は、送信されたパスワードが間違っています。

おすすめ記事