技術ドキュメント
技術ドキュメント目次 -> HTTPプロトコル -> Basic認証の動作本技術ドキュメントは、ここしばらくメンテナンスをしておりません。
内容が古くなっている可能性などございますこと、ご理解を頂けますようお願いいたします。
[オススメ] 国内最安のSSL証明書(RapidSSL 2880円、ジオトラスト 10500円、ベリサイン 39900円)
[オススメ] SSL証明書のアフィリエイトプログラム(最大11700円/1件の報酬を獲得いただけます)
◆ 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/index.html が、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/index.html 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/index.html 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/index.html </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
