Basic認証の通信(流れ)
Basic認証では、ユーザ名とパスワードの間にコロン(:)をはさみ、それをBase64でエンコードし送信します。ユーザ名とパスワードは、平文で送信されるためパスワードが漏れてしまう可能性があります。
クライアントとサーバ間の通信
Basic認証では、レスポンスコードとHTTPヘッダがポイントとなります。
クライアントが認証の必要なページにリクエストすると、サーバは401レスポンスコードを返してきます。レスポンスコード4xxは、クライアント側のさまざまなエラーを表しています。今回の401は、Unauthorizedというエラーを返しクライアント(ブラウザ)は認証が必要だということを知ります。
クライアントが受ける401のレスポンスには、本体も含まれキャンセルした時に表示されます。
HTTP/1.1 401 Authorization Required
Date: Mon, 05 Dec 2005 22:13:23 GMT
Server: Apache/1.3.24 (Unix)
WWW-Authenticate: Basic realm="auth area"
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html lang="ja"
<head>
<title>401 Authorization Required</title>
</head>
<body>
</body>
</html>
ヘッダ内のWWW-Authenticate: Basic realm="auth area"からわかるようにクライアントは認証方式がBasicであることや認証領域(authentication realm)を知り認証用のダイアログを表示します。
認証が必要なことがわかったので、ユーザ名とパスワードをBase64でエンコードしてAuthorizationヘッダを付加してサーバにリクエストします。(例では、bnote:passをエンコード)
Authorization: Basic Ym5vdGU6cGFzcw==
ユーザ名とパスワード正しければリクエストに対してレスポンスコード200で返してきます。 正しくない場合、もう一度レスポンスコード401が返り認証を繰り返します。
Basic認証のまとめ
サーバは、Authorizationヘッダがあるかないかとユーザ名パスワードがあっているかを確認する。なければ401を返す。
クライアントは、401が来たらユーザ名とパスワードを受け付ける。Authorizationヘッダにユーザ名とパスワードをBase64でエンコードして一緒に送信する。