株式会社エスロジカル
株式会社エスロジカル
SSL証明書(3,300円/1年~ DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

HTTPプロトコル:Basic認証の動作

技術ドキュメント目次 -> HTTPプロトコル -> Basic認証の動作

本技術ドキュメントは、2002~2004年頃に作成したものが多いです。
内容が古くなっていることもあるかと思いますが、ご了承ください。

サイフにやさしいSSL証明書
【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。


◆ Basic認証の動作

Basic認証で ID/PW によるアクセス制限がされているサイトにアクセス
するとき、クライアント(ブラウザ等)は、リクエストのヘッダの 
Authorization: に ID/PW を格納してリクエストを行っています。

サーバー側では Authorization: ヘッダに記述されている ID/PW を解析し、
その ID/PW が正しいものであればアクセスを許可し、
ID/PW が正しくなければアクセスを許可しない、という制御を行っています。

Basic認証でアクセス制限されたサイトにアクセスするときの流れは、
次のようになります。

1. ユーザーがクライアント(IE等のWebブラウザ)に目的のURLを入力する。
2. クライアントが、Authorization: ヘッダを付加しないで、
   目的のコンテンツにアクセスする。
3. サーバーは、401 Authorization Required のレスポンスを返して、
   クライアントに認証が必要である旨を伝える。
4. クライアントがユーザーに ID/PW の入力を求める
   (IE等のブラウザが、ポップアップウインドウを出して、
    ID/PW の入力をユーザーに求めるアレです。)
5. ユーザーが ID/PW を入力する。
6. クライアントが、Authorization: ヘッダに ID/PW の情報を付加
   して目的のコンテンツに再度アクセスする。
7. サーバが ID/PW を解析して、認証OKであればコンテンツをクライ
   アントに返す。
8. クライアントがコンテンツを表示して、ユーザーがそれを閲覧する。

        +------+  1--->  +--------+  2--->  +-------+
        |      |  <---4  |        |  <---3  |       |
        | User |         | Client |         | httpd |
        |      |  5--->  |        |  6--->  |       |
        +------+  <---8  +--------+  <---7  +-------+

(コンテンツデータを1つ取得するために、リクエスト・レスポンスの
 やりとりが2回行われています。)

なお、
Authorization: ヘッダには、
Basic認証の ID と PW とを :(半角のコロン)でつなげた文字列を、
base64した値が格納さています。
(例えば、
 Authorization: Basic dXNlcjAxOnBhc3N3b3JkCg== といったようになります。)

以下、
/auth/ が、user01/password という ID/PW で、Basic認証による
アクセス制限されているとして、telnet コマンドを使用して httpリクエスト
を発生させてみた動作をあげておきます。
どのようなリクエスト・レスポンスのやりとりが行われているか確認してみてください。

Authorization: ヘッダを付加していないアクセス
# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
GET /auth/ HTTP/1.0

HTTP/1.1 401 Authorization Required
Date: Mon, 10 Jun 2002 17:12:23 GMT
Server: Apache/1.3.24 (Unix)
WWW-Authenticate: Basic realm="member only"
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>401 Authorization Required</TITLE>
</HEAD><BODY>
<H1>Authorization Required</H1>
This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.<P>
<HR>
<ADDRESS>Apache/1.3.24 Server at ns.gorigori.jp Port 80</ADDRESS>
</BODY></HTML>
Connection closed by foreign host.
#


Authorization: ヘッダを付加したアクセス
# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
GET /auth/ HTTP/1.0
Authorization: Basic dXNlcjAxOnBhc3N3b3JkCg==

HTTP/1.1 200 OK
Date: Mon, 10 Jun 2002 17:14:34 GMT
Server: Apache/1.3.24 (Unix)
Last-Modified: Mon, 10 Jun 2002 17:02:03 GMT
ETag: "134b5b-45-3d04db8b"
Accept-Ranges: bytes
Content-Length: 69
Connection: close
Content-Type: text/html

<html>
<head></head>
<body>
This is /auth/
</body>
</html>
Connection closed by foreign host.
#

(dXNlcjAxOnBhc3N3b3JkCg== は user01:password をBASE64した値)




■ HTTPプロトコル についての他のドキュメント


■ 他のグループのドキュメント

Apache  /  Linux  /  FreeBSD  /  OpenSSL  /  Perl  /  HTTPプロトコル  /  Jakarta Tomcat  /  Java  /  NetBSD  /  Oracle  /  PostgreSQL  /  UNIX の C言語  /  UNIX のコマンド  /  Windows  /  bind  /  システム運用TIPS

アンケートにご協力をお願いいたします。

1. このドキュメントへの評価をご選択ください。
         

2. ご感想をお書きください。