今更ながら、HTTPで用いられる認証方式の概要をまとめる。
一般的な HTTP 認証の流れ
-
サーバーは1回目のクライアントからのリクエストに対して、
401
(Unauthorized) レスポンスを返却し、WWW-Authenticate
レスポンスヘッダーを含めて認証方式に関する情報を提供する。 -
クライアントは
Authorization
リクエストヘッダーに資格情報を含めることで、サーバーに自身の認証を要求する。
用語
WWW-Authenticate
- リソースへのアクセスに使用する認証メソッド(Basic,...)を指定する。
- このヘッダーを参照し、クライアントは資格情報の提供方法を認識する。
WWW-Authenticate: <type> realm=<realm>
-
<type>
:認証方式名。Basic
などが指定される。 -
realm
:保護領域を説明する。これは、「本番アプリへのアクセスである」などをメッセージに設定することで、ユーザーが、どの領域にアクセスしようとしているかを通知する。
Basic認証
- Base64 でエンコードした資格情報(IDとパスワード)を
Authorization:Basic
ヘッダーに付与する方式。 - 可逆エンコードのため、HTTPSでの送信必須。
Bearer認証
- OAuth 2.0 で保護されたリソースにアクセスするためのベアラートークンを
Authorization: Bearer
で指定する方式。
Digest認証
- IDとパスワードをMD5でハッシュ(ダイジェスト)化して送る方式
その他、Negotiate認証などいろいろある模様。