digest認証
#認証
digest認証とは
WebサーバーとWebブラウザなどの間で利用者の認証を行う方式の1つ
認証情報をハッシュ化して送受信するので、basic認証よりもセキュリティ的に安全
理解するのに必要な前提知識
チャレンジ/レスポンス認証
HTTP認証
WWW-Authenticate, Authorizationヘッダー
digest認証のブラウザから見た流れ
1. digest認証が必要なリソースにブラウザからアクセスする
2. すると、ブラウザ上でポップアップが表示され、ユーザー名・パスワードを求められる
3. そのフォームにユーザー名・パスワードを入力して送信する
4. 値が正しい情報であれば、リソースが表示される
digest認証の仕組み概要(チャレンジ/レスポンス認証を知るとより鮮明になる)
クライアントからdigest認証必須のリソースにリクエストがあると、サーバーは一旦401を返す
401を返す際にある乱数(nonce)も一緒に返す
クライアントはpasswordなどの情報を含めて、ハッシュ値を生成する
ハッシュ値にnonceをくっつけたデータを、再度同じリソースにリクエストと一緒に送る
サーバー側でもハッシュ値を生成して同じようなデータを作成し、クライアントから送られたデータと照合する
一致していれば認証完了とする
digest認証の仕組み詳細
Digest認証 -Wikipedia-
HTTPクッキーと認証
HTTP クライアントを作ってみよう(6) - Digest 認証編 -
最近は重要性が下がってきている
Digest認証は認証情報を平文のまま送受信するBASIC認証(基本認証)に比べ、クライアントとサーバ間の伝送路の安全が確保されていない状況で認証情報を保護することができるが、現代ではSSL/TLSを用いてHTTPによるデータ伝送全体を暗号化するHTTPS通信が広く普及しており、かつてより重要性は低下している。
つまり、HTTPS通信が当たり前化したこの時代だと、容易に通信を解読できないのでBasic認証でも問題ない状況。
参考
Digest認証 -Wikipedia-
Digest認証とセッション認証を組み合わせた認証の提案
DIgest認証はどのような脆弱性対策をしてるか
HTTP クライアントを作ってみよう(6) - Digest 認証編 -
FlaskでDigest認証をするとcurlでユーザーとパスワードを入れても認証されない
HTTPクッキーと認証