Basic認証とは
Basic
認証(ベーシックにんしょう)は、HTTPプロトコルで定義されている
認証方式の一つです。基本
認証とも呼ばれます。
WebサイトやWebサービスへのアクセス制御に用いられ、ユーザーがリソースにアクセスする際に、ユーザー名と
パスワードによる
認証を要求します。
Basic認証の仕組み
Basic
認証では、ユーザー名と
パスワードをコロン「:」で連結し、
Base64という方式でエンコードしてHTTPヘッダーに含めて送信します。
具体的には、以下のような流れで
認証が行われます。
1.
クライアントのリクエスト: クライアントが
認証を必要とするリソース(ページなど)をサーバーにリクエストします。
2.
サーバーの応答: サーバーは、そのリソースへのアクセスに
認証が必要であることを示す「401 Unauthorized」という
HTTPステータスコードと、
認証方式(Basic
認証)や
認証領域(realm)をクライアントに返します。
3.
クライアントによる認証情報の提示: クライアントは、受け取った
認証領域の情報をユーザーに提示し、ユーザー名と
パスワードの入力を促します。
4.
認証情報の送信: ユーザーが入力したユーザー名と
パスワードを
Base64エンコードし、HTTPヘッダーに含めて、再度サーバーにリクエストを送信します。
5.
サーバーの応答: サーバーは、送信された
認証情報を検証し、
認証に成功した場合はリソースをクライアントに返します。
認証に失敗した場合は、再度「401 Unauthorized」を返します。
Basic認証の例
以下に、
認証が成功した場合のHTTPリクエストとレスポンスの例を示します。
1.
認証を伴わないリクエスト
GET /index.html HTTP/1.1
Host: example.com
2.
認証が必要であることを示すサーバーのレスポンス
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="My Realm"
3.
クライアントによる提示、およびユーザーによる入力
(通信は行われません)
4.
認証を伴うリクエスト (ユーザー名 "root", パスワード "password")
GET /index.html HTTP/1.1
Host: example.com
Authorization: Basic cm9vdDpwYXNzd29yZA==
- `cm9vdDpwYXNzd29yZA==`は、`root:password`を
Base64でエンコードしたものです。
5.
サーバーのレスポンス
HTTP/1.1 200 OK
...(リソースの内容)
Basic認証の課題
Basic
認証は、ユーザー名と
パスワードを
Base64でエンコードするだけで暗号化は行わないため、盗聴によって容易に
認証情報が漏洩する危険性があります。
また、中間者攻撃によって、
認証情報を改ざんされる可能性もあります。
そのため、Basic
認証を使用する際は、
HTTPSなどの暗号化通信と組み合わせて利用することが強く推奨されます。
Digest認証
Basic
認証の脆弱性を改善するために、Digest
認証というより安全な
認証方式も存在します。
Digest
認証では、ユーザー名と
パスワードをハッシュ化して送信することで、盗聴による漏洩のリスクを低減しています。
関連事項
- - HTTP[[認証]]: HTTPプロトコルで定義されている認証方式全般を指します。
- - Base64: データをテキスト形式で表現するためのエンコード方式です。
- - Digest認証: Basic認証の課題を解決するために開発された認証方式です。
参考資料
旧規定