認証画面が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種類あり,その違いによって,画面がポップアップしたり,しなかったりするのだ。