16

ユーザー名と暗号化されたパスワードを格納する中央データベースで 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 ダイジェスト認証を使用したり、パスワードをクリア テキストにすることはできますか?

別のサブドメインからページを要求した場合、ユーザーは資格情報を再入力する必要がありますか?

タブが閉じられたとき、または全体が閉じられたときにのみ、ブラウザーはキャッシュされたパスワードを削除しますか? おそらくこれはブラウザごとに異なるでしょう - どのブラウザがそれを削除し、どのブラウザがそれを保持するかに興味があります。

全体的な問題は、ダイジェスト認証が、既に暗号化されたパスワードを持つ中央ユーザー データベースを使用する私のシナリオに適しているかどうかです。または、セッション ベースのシングル サインオン サービスを使用する方がよいでしょうか?

4

2 に答える 2

6

ハッシュ化されたパスワードのデータベースが既にあるこのシナリオでは、同じ関数を使用してハッシュ化されていない限り、ダイジェスト認証を使用することはできません。

ここでの最善の解決策は、ログイン ページを作成し、Cookie セッションを使用してユーザーの権限を制御することだと思います。このソリューションを使用すると、他の質問に対する答えが得られます。

  • Cookie はサブドメイン間で使用するように設定できます: http://en.wikipedia.org/wiki/HTTP_cookie#Cookie_attributes
  • セッションは、ユーザーがブラウザを閉じるか、タイムアウトになるか、ユーザーがログオフ ボタンをクリックするまで有効です。このオプションをユーザーに提供することを忘れないでください!!!
于 2010-01-21T16:15:10.030 に答える
0

最初にユーザーが入力したパスワードを、パスワードをデータベースに保存するために使用されるのと同じ関数でハッシュし、次にそれをダイジェスト パスワードとして渡すと、残りの手順は同じになると思います。

通常の形式http://www.rojotek.com/blog/2008/05/19/http-authentication-in-a-url/ではなく、HTTP URL でユーザー名とパスワードを渡す必要があります 。

于 2014-04-20T12:00:27.680 に答える