ユーザー認証機能を利用して特定のユーザーだけが閲覧できるページを作成してみましょう。

 Webページは一般に,インターネットに接続しているユーザーであればだれもが閲覧できます。しかし,中には第三者には見られたくない文書もあります。例えば,現在進行中のプロジェクトについて話し合う部内用の掲示板などです。

 IPアドレスごとのアクセス設定は「order」「allow」「deny」を使えばよいでしょう。しかしこの方法は役に立たないことがあります。大抵のプロバイダは動的にIPアドレスをユーザーに割り振るために,許可するマシンのIPアドレスを特定できないからです。

 このような場合にお勧めなのが,ユーザー名とパスワードの入力を要求する方法です。

 Apacheはユーザー名とパスワードの一覧を記述したファイル(またはデータベース)を持っています(図1)。この一覧は管理者が作成します。

図1●Apacheでのユーザー認証
図1●Apacheでのユーザー認証
Apacheの認証ファイルのデータと一致すると,ディレクトリへのアクセスが許される。

 認証が必要なディレクトリにWebブラウザでアクセスすると,Apacheはユーザーに対してユーザー名とパスワードの入力を促します。例えば,Firefoxの場合はダイアログが表示されます(写真1)。

写真1●Firefoxでのユーザー認証
写真1●Firefoxでのユーザー認証

 もし,ユーザー名とパスワードが保存してあるデータと一致した場合には,ディレクトリへのアクセスを許可します。この後,Webブラウザを終了させない限り,認証が必要なディレクトリに自由にアクセスできます。

 一致しなかった場合は再度入力を促します。ユーザーが認証をあきらめて「キャンセル」ボタンをクリックすると,「認証が必要」という主旨のメッセージを表示します。


基本認証とダイジェスト認証

 認証には複数の方式があります。Apacheでは主に,「基本認証」と「ダイジェスト認証」を利用します。

 基本認証とは,ユーザー名とパスワードをApacheが持っているデータベースと比べる方法です。しかし,暗号化処理が行われていない平文のままネットワーク内を流れるため,ネットワーク上でユーザー名とパスワードを盗まれてしまう恐れがあります。

 そこで,有用なのがダイジェスト認証です(図2)。

図2●ダイジェスト認証
図2●ダイジェスト認証
ダイジェスト認証はWebブラウザ側でパスワードをハッシュ値にしてからサーバーに送るので,盗聴などの危険を減らせる。

 ダイジェスト認証では,Webブラウザがパスワードに特殊な計算を施して,ハッシュ値(ダイジェスト値)を算出します。Webブラウザはパスワードではなく,このハッシュ値をApacheに送ります。Apacheでも同様に認証ファイルに保存されているパスワードを特殊な関数で計算し,ハッシュ値を作成します。

 そして,送られてきたハッシュ値と自身で算出したハッシュ値を比べ,結果が同じであれば,ディレクトリへのアクセスを許します。

 ハッシュ値はURIやサーバーが決めた任意の値(nonce値)などを利用して計算します。認証ごとにハッシュ値が異なりますので,もしネットワークの途中で盗聴されたとしても,第三者は認証が必要なディレクトリにアクセスできません。

 ただし,ユーザーがダイジェスト認証に対応したWebブラウザを使う必要があります。少し古いWebブラウザや低機能なWebブラウザは,ダイジェスト認証に対応していません。最近リリースされているFirefoxやInternet Explorerならばダイジェスト認証を利用できます。