Real World HTTPの2章2.6認証とセッションを読んだ
認証とセッション
ユーザ名とパスワードを毎回クライアントから送る方式
- BASIC認証
- Digest認証
BASIC認証
- ユーザ名とパスワードをbase64エンコーディングしたもの
- 可逆変換なのでサーバーで復元した値をDBと比較して正しいユーザかどうか検証できる
- SSL/TLS通信を使っていない状態で通信を傍受されると通信内容から簡単にユーザ名とパスワードが漏洩してしまう
Digest認証
- BASIC認証より強固な認証方式で、ハッシュ関数を利用する
- まず、ブラウザが保護された領域にアクセスしようとすると、401 Unauthorizedというステータスコードでレスポンスが返ってくる
- その際にレスポンスに付与されたヘッダー情報などから計算で求めた値をヘッダーに付け加えて再度リクエストを送信する
- サービス側でもサービスの内部に保存されているユーザ名とパスワードを使って計算を行い、同じ値が計算できた場合に認証が成立する
- これにより、ユーザ名とパスワードそのものをリクエストに含めなくてもサーバ側でユーザを正しく認証できるようになる
クッキーを使ったセッション管理
BASIC認証もDigest認証も今ではあまり使われていない
なぜあまり使われていないのか?
- 特定のフォルダ以下を「見せない」という使い方しかできず、トップページにユーザ固有の情報を出すような使い方ができない
- リクエスト毎にユーザ名とパスワードを送信し、計算をして認証する必要がある
- 明示的なログアウトができない
- ログインした端末の識別ができない