ユーザー名と暗号化されたパスワードを格納する中央データベースで HTTP ダイジェスト認証を使用したいと考えています。これらのデータは、Apache httpd や Tomcat などのさまざまなサーバーで使用する必要があります。クライアントは、ブラウザやその他のアプリケーションが RESTful な方法で通信する人間です。
私が理解している限り、ハッシュ化されたパスワードを持つテーブルは使用できませんでした。クリア テキストのパスワードが必要な場所にHA1 = MD5(username:realm:password)を保存する可能性があるだけ です - 正しいですか?
一方、ハッシュされたパスワードを Apache httpd で使用できるようです:
Apache httpd docは次のように述べています。
クエリ ステートメントによって返される最初の行の最初の列の値は、暗号化されたパスワードを含む文字列である必要があります。
ダイジェスト認証で動作しますか? ハッシュ アルゴリズムを指定するパラメーターはありません。Apache httpd はどのアルゴリズムを使用するかをどのように決定しますか?
RFC 2617は次のように述べています。
4.13 パスワードの保存
ダイジェスト認証では、認証エージェント (通常はサーバー) が、ユーザーの名前とパスワードから派生したデータを、特定のレルムに関連付けられた「パスワード ファイル」に保存する必要があります。通常、これにはユーザー名と H(A1) で構成されるペアが含まれる場合があります。ここで、H(A1) は、上記のユーザー名、レルム、およびパスワードのダイジェスト値です。
パスワードはクリアテキストでなければならないようです。
サーブレット 3.0 仕様には次のように書かれています。
パスワードはネットワーク上で送信されませんが、HTTP ダイジェスト認証では、予想されるダイジェストを計算して受信したオーセンティケーターを検証できるように、クリア テキストのパスワードに相当するものを認証コンテナーで利用できる必要があります。
ここでの「平文のパスワードに相当するもの」とは何ですか? パスワードハッシュ?
Tomcat のドキュメントには次のように書かれています。
DIGEST 認証でダイジェストされたパスワードを使用する場合、ダイジェストの生成に使用される平文は異なります。上記の例では、{cleartext-password} を {username}:{realm}:{cleartext-password} に置き換える必要があります。たとえば、開発環境では、これは testUser:localhost:8080:testPassword の形式をとることがあります。
ここでは平文のパスワードが必要です。
では、すでに暗号化されたパスワードで HTTP ダイジェスト認証を使用したり、パスワードをクリア テキストにすることはできますか?
別のサブドメインからページを要求した場合、ユーザーは資格情報を再入力する必要がありますか?
タブが閉じられたとき、または全体が閉じられたときにのみ、ブラウザーはキャッシュされたパスワードを削除しますか? おそらくこれはブラウザごとに異なるでしょう - どのブラウザがそれを削除し、どのブラウザがそれを保持するかに興味があります。
全体的な問題は、ダイジェスト認証が、既に暗号化されたパスワードを持つ中央ユーザー データベースを使用する私のシナリオに適しているかどうかです。または、セッション ベースのシングル サインオン サービスを使用する方がよいでしょうか?