HTTPプロトコル:Basic認証の動作
技術ドキュメント目次 -> HTTPプロトコル -> Basic認証の動作本技術ドキュメントは、2002~2004年頃に作成したものが多いです。
内容が古くなっていることもあるかと思いますが、ご了承ください。
【低価格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