mutao.net

いわゆる雑記。

認証

認証が必要な場合ステータスコード401とWWW-Authenticateヘッダを利用してクライアントリソースに認証情報を通知できる。

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic
realm="Example.jp"
  • realm はサーバー上でリソースが属しているURI Spaceが表される。

Basic認証

  • ユーザ名とパスワードによる認証方式
  • ユーザ名とパスワードをAuthorizationヘッダに入れてリクエスト毎に送信する
Authorization: Basic
dXNlcmlkOnBhc3N3b3Jk
  • Base64は簡単にデコード可能
dXNlcmlkOnBhc3N3b3Jk
↓ デコード後
userid:password

c.f. https://uic.jp/base64encode/

  • ユーザ名とパスワードが平分でネットワーク上に流れる
  • SSLTLSHTTPS 通信で通信経路上で暗号化する必要がある。
Connection - secure connection settings
The connection to this site is encrypted and authenticated using TLS 1.2, ECDHE_RSA with P-256, and AES_256_GCM.

Digest認証

  • Digestはメッセージダイジェストの略
  • あるメッセージに対してハッシュ関数を適用した結果のハッシュ値のこと
  • Basic認証よりもセキュアな認証方式
  • サーバーは401を返し realm 、qoq、opaque と nonce(number userd once) というランダムな文字列を返す
  • qoq (quality of protection) は「auth」か「auth-init」を指定する。
    • auth: メソッドとURIからハッシュを作成
    • auth-init: メソッドとURIとメッセージボディからハッシュを作成
  • opaque: ランダムな文字列で同じURI空間へのリクエストでは共通してクライアントからサーバに送信される

  • nonceの値はサーバーサイドの実装に依存し。サーバーサイドだけが知りえる情報をもとに生成される

  • パスワードは暗号化されるがメッセージ自体は暗号化されない
    • SSLTLSHTTPS 通信で通信経路上で暗号化する必要がある

Digest生成のアルゴリズム

  • ユーザ名、realm、パスワードを「:」で連結してMD5でハッシュ化する
  • メソッドとURIとパスを「:」で連結してMD5でハッシュ化する
  • さらにサーバーから得たnonceクライアントがcnonceを送った回数、クライアントが生成したcnonce、qoqの値を「:」で連結してMD5でハッシュ化する