Basic認証の通信(流れ)

メモ:  Category:dataroom

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 &quot;-//IETF//DTD HTML 2.0//EN&quot;>
<html lang=&quot;ja&quot;
<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でエンコードして一緒に送信する。

bluenote by BBB