ID・パスワードによる照合を行ってコンテンツへのアクセスを会員制(メンバー制)にするユーザー認証システムの Basic認証を紹介します。Basic認証には .htaccess ファイルに加えて、ユーザーの名簿にあたる .htpasswd ファイルも用意する必要があります。設定したディレクトリ(階層)配下のすべてのファイルが IDとパスワードによる照合を行う認証対象となります。
AuthType Basic AuthUserFile /virtual/equation/public_html/sample/.htpasswd AuthGroupFile /dev/null AuthName "Enter password" Require valid-user
AuthTypeディレクティブはユーザー認証システムの種別を指定します。ユーザー認証システムの種類には、Basic(Basic認証)と Digest(MD5認証)があります。ただし、Digest認証の方は UA の対応が乏しいので、現実的には Basic認証が用いられます。ここで紹介するのも Basic認証の方です。Basic認証を行うことを示すには、AuthTypeディレクティブに続いて Basic の値を記述します。
2行目の AuthUserFileディレクティブは、認証のためのユーザーの名簿がある場所を示します。値には、フルパス(絶対パス)を指定します。ここで言うフルパスとは、通常の URI である http:// からはじまるものとは異なります。たとえば、w3g.jp が利用している xrea.com では /virtual/ユーザーID/ディレクトリ名/ の形で記述します。Basic認証の設定でつまづくとすれば、このフルパスの設定が多いでしょう。レンタルサーバーであればユーザーページ(管理室)等で確認できるはずです。
3行目の AuthGroupFileディレクティブは、ユーザー認証のためのグループファイルを設定しています。グループファイルは Requireディレクティブで Require group を宣言したときのみ必要になるものです。ここでは AuthGroupFileディレクティブには /dev/null の値を記述しているのでグループファイルは存在しないということを示しています。つまり、この場合はグループごとでのアクセス制限はしないという意味になります。もし、グループファイルを作成する場合は、AuthUserFileディレクティブと同じ様にグループファイルのある場所をフルパスで記述します。
4行目の AuthNameディレクティブはファイルへのアクセス時にダイアログボックスに表示する文字列を指定します。認証を促す注意書きにあたるラベルです。文字列にスペースを含む場合は、文字列全体をダブルクォーテーション(")で囲みます。日本語の指定も可能ですが、.htaccess を保存する際の文字コード(符号化方法)に注意してください。たとえば xrea.com では .htaccess ファイルの文字コードは Shift_JIS 以外では文字化けするようです。また、ユーザーの環境によっても日本語は問題を起こすことが多いようなので、なるべく半角英数字だけを使って入力を案内できる英語あたりを使うようにした方が無難です。
5行目の Requireディレクティブはユーザー認証の際に、認証させるユーザを指定します。最初の値にパスワード認証の機会を与えるメンバーを指定します。
上記の例では、valid-user と記述しています。これは、ユーザーの名簿である .htpasswd ファイルに記述されている全てのユーザーを許可することを示しています。つまり、IDとパスワードの照合が valid であれば(正しければ)、誰でもそのディレクトリへとアクセスすることが可能であることを示します。ユーザーの指定には他にグループ単位であれば、Requireディレクティブに続いて group と記述し、ユーザー単位であれば user と記述します。
Basic認証の設定は名簿(.htpasswd)に書かれたユーザーのみアクセスを許可してくださいという処理を行います。この際に名簿である .htpasswd ファイルが他人に見られては困るので、パスワード部分を暗号化しておくと良いでしょう。ユーザーの名簿にあたる .htpasswd は ID(ユーザー名)とパスワード部分をコロン(:)で区切って記述します。パスワードの暗号化については、こちらに暗号化用スクリプトを用意したので、ID部分にアクセスを許可したいユーザー名を、PASS部分にパスワードを入力してご利用ください。
また、この.htpasswd はいくら暗号化させていても悪意のある人に見られてしまうと、解読されることが起こりえるかもしれません。そこで、このファイルを隠すようにしておくとより安全です。最も安心なのは、ウェブサーバーのドキュメントツリー(~/public_html/) 直下に置かないことです。他に .htaccess を使って隠す方法には、Filesディレクティブで指定されているファイル名だけに、Filesディレクティブの中で定義されている他のディレクティブを適用させることができるようにして、.htpasswd のファイルへのアクセスを拒否する記述をおこなったり、AddHandlerディレクティブで .htpasswd ファイルを CGIスクリプトとして扱うように設定して、ファイルの中身を参照することができないようする方法などがあります。
<Files ~ "^.htpasswd$"> deny from all </Files>
AddHandler cgi-script htpasswd
また、ユーザーが会員を退会して、そのユーザを削除する場合は、テキストエディタなどでそのユーザの行ごと削除するだけで済みます。
認証を行う名簿の .htpasswd ファイルは .htaccess ファイルと同じようにドット(.)からはじまっていて通常のファイル名にあたる部分がなく拡張子だけで構成されています。このためテキストエディタなどで「名前をつけて保存」を選択した際に、確かに .htpasswd として保存したはずなのに、勝手に .htpasswd.txt のようにリネームされることがあります。これは何度修正しても、テキストエディタ側が拡張子がつけられていないものに対しては、".txt" などの拡張子を自動的につける設定になっているため .htpasswd というファイルで保存することはできません。そのため、このような場合は、ローカルでは .htpasswd.txt のままで保存しておき、FTP でウェブサーバーに .htpasswd.txt をアップロードした際にサーバー側で .htpasswd へとリネームするのが確実な方法です。
http://w3g.jp/others/htaccess/basic_authentication実績:大阪学院 入試サイト New! / 三田市民病院 / 神戸女学院大学 入試サイト / 釣りサンデー