図2-4 ユーザー名とパスワードを入力する画面には2種類ある<BR>ポップアップ画面が出てきて,そこに入力するケースと,Webページのフォームに入力するケースがある。
図2-4 ユーザー名とパスワードを入力する画面には2種類ある<BR>ポップアップ画面が出てきて,そこに入力するケースと,Webページのフォームに入力するケースがある。
[画像のクリックで拡大表示]
図2-5 ヘッダー情報にユーザー名とパスワードを入れて送る&lt;BR&gt;ポップアップ画面に入力する方法は,HTTPに標準で備わっているしくみを利用している。認証が必要なことを伝えたり,ユーザー名やパスワードを伝えるのにHTTPリクエストのヘッダーを使う。
図2-5 ヘッダー情報にユーザー名とパスワードを入れて送る<BR>ポップアップ画面に入力する方法は,HTTPに標準で備わっているしくみを利用している。認証が必要なことを伝えたり,ユーザー名やパスワードを伝えるのにHTTPリクエストのヘッダーを使う。
[画像のクリックで拡大表示]
図2-6 独自の認証用プログラムを利用する場合もある&lt;BR&gt;HTTPのしくみに頼らずに,Webサーバー側で認証用のプログラムを用意している。
図2-6 独自の認証用プログラムを利用する場合もある<BR>HTTPのしくみに頼らずに,Webサーバー側で認証用のプログラムを用意している。
[画像のクリックで拡大表示]

認証画面が2種類あるわけ
ポップアップ画面はブラウザ,ページの入力欄はサーバーが作る

 Webページにアクセスする際,ユーザー名とパスワードの入力を求められることがある。この入力画面に2種類のタイプがあることに気づいているだろうか(図2-4[拡大表示])。

 一つは,別のウインドウがポップアップし,そこに入力するというもの。こうしたポップアップ画面は,いつも同じデザインになっている。

 もう一つは,普通のWebページにユーザー名とパスワードの入力欄が表示され,そこに入力するタイプ。このタイプは,Webサイトごとにデザインが異なっていたりする。

ブラウザが用意した画面を表示

 ウインドウがポップアップするケースは,HTTPに標準で備わっているしくみを利用する。どのようにポップアップ画面が出てくるか見てみよう。

 初めにWebブラウザがWebサーバーにHTTPリクエストを送る。このHTTPリクエストを受け取ったWebサーバーは,Webページのデータを返信する代わりに,認証が必要であること伝えるHTTPレスポンスを返信する。それは,「401 Unauthorized(アンオーソライズド)」というメッセージが最初の行(ステータス行)に入ったレスポンスだ(図2-5[拡大表示])。これは「アクセス権限がありません」という意味である。さらに,HTTPレスポンスのメッセージ・ヘッダーも注意深く見てみると,認証に必要な情報を伝えるためのWWW-Authenticate(オーセンティケイト)ヘッダーが入っている。

 このような特別なHTTPレスポンスを受け取ったWebプラウザは,ユーザー名とパスワードを入力するためのウインドウをポップアップさせる。このポップアップ画面は,Webサーバーが用意したものではなく,Webブラウザが標準で用意している画面を表示する。だから,こうした認証方法を使っているWebサイトでは,どこも似たようなデザインの認証画面になる。

パスワードをヘッダーに入れて送る

 次に,ポップアップ画面にユーザー名などを入力したあとを見ていこう。

 ユーザーがパスワードなどを入力してOKボタンをクリックすると,Webブラウザはユーザー名とパスワードをコロン(:)でつなぎ,一つにまとめる。さらに,このデータをBase64(ベースロクヨン)*という符号化方式でASCII(アスキー)*形式のテキストに変換する。

 そしてWebブラウザは,WebサーバーへHTTPリクエストをもう一度送る。ただし,今度はユーザー名とパスワードを符号化したデータも送る*

 Webサーバーは,HTTPリクエストからデータを取り出し,元のユーザー名とパスワードに復元する。さらに,登録されている情報と比較する。一致すれば,Webサーバーは要求されたWebページのデータをHTTPレスポンスに入れて返信する。

プログラムに認証を任せる

 ポップアップ画面が出てこないケースは,どうなっているのだろうか。

 このケースは,HTTPの標準機能を使わずに,Webサーバー側に認証用のプログラムを用意している。

 Webブラウザは,まず認証用のWebページをリクエストし,WebサーバーはそのHTMLデータを返信する(図2-6[拡大表示])。もともと認証用のWebページがサーバーに用意されているので単に要求するだけである。

 この認証用のWebページには,ユーザー名やパスワードの入力欄(フォームと呼ぶ),入力した情報をWebサーバーに送信するためのボタンなどが用意されている*

 Webブラウザは,受け取ったHTTPレスポンスから認証用のWebページを表示する。そこの入力欄にユーザー名とパスワードをユーザーが入力し,「送信」などと書かれたボタンをクリックする。すると,Webブラウザはユーザー名やパスワードをHTTPリクエストに入れてWebサーバーに送信する。

 こうしてWebブラウザからHTTPリクエストを受け取ったWebサーバーは,リクエスト中のユーザー名とパスワードを認証用プログラムに渡す。

 ここで使われる認証用のWebページは,検索ページなどと同じしくみである。データを入力させるフォーム付きのWebページがあり,それを使ってWebブラウザからデータを受け取る。そして,Webサーバーがプログラムを呼び出して,入力されたデータを処理する。違うのは,プログラムが処理する内容だけである。

 認証用のプログラムは,データベースなどに登録されているユーザー情報とWebブラウザが送ってきたデータを比較して,一致すればそのユーザーを認証する。そして,HTMLデータを作成してWebサーバーに渡す。最後に,Webサーバーが,そのデータをWebブラウザに返信する。

 認証方法には2種類あり,その違いによって,画面がポップアップしたり,しなかったりするのだ。