ベーシック認証とダイジェスト認証

HTTPの認証方法で代表的なものとしてベーシック認証、ダイジェスト認証などがある。

ベーシック認証

ベーシック認証は基本認証と呼ばれることもあり、ユーザとパスワードをコロンで繋ぎBase64エンコードしたものを送信する。

サーバには以下のようなフォーマットでヘッダに含まれる。

Basic Z3Jtbjpob2dlaG9nZQ==

セキュリティ

盗聴された場合はbase64でデコードすることで簡単にユーザ・パスが判明する。

$ echo 'Z3Jtbjpob2dlaG9nZQ==' | base64 -D
grmn:hogehoge

設定方法(Apacheの場合)

htpasswdの作成

$ htpasswd -c -b /path/to/.htpasswd <ユーザ名> <パスワード> #新規作成
$ htpasswd -b /path/to/.htpasswd <ユーザ名> <パスワード> #追記

Apacheの設定

AuthType Basic
AuthName "Access to the staging site"
AuthUserFile /path/to/.htpasswd
Require valid-user

ダイジェスト認証

ベーシック認証で問題となった盗聴・改竄を防ぐために考案された。 パスワードをMD5でハッシュ化したものを送信する。ユーザ名は平文で流れる。

サーバには以下のようなフォーマットで送信される。

Digest username=\"grmn\", realm=\"Access to the staging site\", nonce=\"uWyUio91BQA=272da557c40a99343123d4de48a6ed1024cb5f60\", uri=\"/path/to/index.html\", algorithm=MD5, response=\"6b752b43a30e613c520f78b346553775\", qop=auth, nc=00000001, cnonce=\"2c2e499270c1169b\"

ダイジェスト認証の大枠の流れはDigest認証 - Wikipediaがわかりやすい。

htpasswdの作成

新規作成の場合は「-cオプション」を追加。追記の場合は「-cオプション」を除く。

$ htdigest -c /path/to/.htpasswd "Access to the staging site" ユーザ名
Adding password for grmn in realm Access to the staging site.
New password:<パスワード応答>
Re-type new password:<パスワード応答>

Apacheの設定

AuthType Digest
AuthName "Access to the staging site"
AuthUserFile /path/to/.htpasswd
Require valid-user

参考

HTTP 認証 - HTTP | MDN

Digest認証 - Wikipedia