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)を知り認証用のダイアログ を表示します。

Basic認証ダイアログ

認証が必要なことがわかったので、ユーザ名とパスワードをBase64でエンコードしてAuthorization ヘッダを付加してサーバにリクエストします。(例では、bnote:passをエンコード)

Authorization: Basic Ym5vdGU6cGFzcw==

ユーザ名とパスワード正しければリクエストに対してレスポンスコード200で返してきます。 正しくない場合、もう一度レスポンスコード401が返り認証を繰り返します。

Basic認証のまとめ

サーバは、Authorizationヘッダがあるかないかとユーザ名パスワードがあっているかを 確認する。なければ401を返す。

クライアントは、401が来たらユーザ名とパスワードを受け付ける。Authorizationヘッダに ユーザ名とパスワードをBase64でエンコードして一緒に送信する。