LoginSignup
2
4

More than 5 years have passed since last update.

HTTP認証について

Last updated at Posted at 2018-06-05

HTTP認証

Basic認証

  • ユーザー名とパスワードを:で区切り, BASE64でエンコードした文字列をHTTPヘッダのAuthorizationに指定する.
  • 認証情報を平文で送るため盗聴される恐れがあるため, SSLにより通信を暗号化する等の対策が必要になる.

Base64

  • バイナリをテキストに置換する変換方式.
  • 英大文字, 英小文字, 数字,+ ,/の64文字が使用される.
  • 元データを6 bitずつに区切り, 整数値(0-63)を変換表に従って置換する. 6 bitに満たない場合は0でパディングする.
  • 変換表は以下の通り.
整数値 変換後文字
0-25 A-Z
26-51 a-z
52 +
53 /
  • byte単位でデータを扱うため,変換後の文字列は4文字単位の必要がある. 4文字に満たない場合は=でパディングする.

Digest認証

  • クライアントでユーザー名, パスワード, ランダムな文字列をMD5でハッシュ化し, サーバーに送信する. サーバー側でもハッシュ値を計算し, クライアントから送信されたハッシュ値と合致するかを検証する.
  • ハッシュ値を送信するため, パスワードを平文で送らないという点でBasic認証に比べて盗聴に耐性がある.

フロー

  1. クライアントは認証ページにアクセスする.
  2. サーバーは401を返し認証を要求する. その際にランダムな文字列であるnonceをレスポンスに含める.
  3. クライアントでユーザー名とパスワードを入力する.
  4. クライアントでランダムな文字列であるcnonceを生成し, ユーザー名, パスワード, nonce, cnonceをMD5でハッシュ化しサーバーに送信する.
  5. サーバーでもユーザー名, パスワード, nonce, cnonceをMD5でハッシュ化し, クライアントから送信された値と合致するか検証する.
  6. 成功した場合はコンテンツを返す.

参考

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4