Basic認証
Basic Authentication
Basic認証とはWebサイトへのアクセスに対して、
ユーザー名とパスワードの入力を求めるユーザー認証の方法です。
当該サイトのフォルダに、 .htaccess と .htpasswd という
2つのファイルを作って置くことで実現します。
- いずれもテキストファイルなので、テキストエディタがあれば作れます。
- 尚、 .htaccess と .htpasswd のような [.]ではじまるファイルは、一般に隠しファイルとして扱われます。「保存したら見えなくなった(隠れた)」という状態になりますので、PCのフォルダ表示設定で「隠しファイルを表示」の状態にして作業して下さい。
CONTENTS
.htaccessファイルの作成
.htaccessファイルは、httpd.confで設定されているApache(httpサーバー)の各種設定を、ディレクトリごとに独自に変更するためのファイルです。
Apacheは、httpでアクセスされたフォルダに.htaccessというファイルがあると、それをまず読んで、IDとパスワードを要求します。
記述例
AuthType Basic AuthName "Basic Authentication Sample" AuthUserFile /home/sampleuser/public_html/test/.htpasswd Require user sampleuser
ただし、上の4行をそのままコピー&ペーストしても動きません。
各行には下記とおり、それぞれ意味があるので、特に3、4行目については、あなたの設定に書き換える必要があります。
- 1行目:BASIC認証を要求することを宣言(例のままでOK)
- 2行目:この認証の名前(例のままでもOKですが、複数の認証をあちこち設定する場合は、認証ごとに異なる文字列にする必要があります)
- 3行目:パスワードファイルの絶対パス( 以下参照 )
- 4行目:ユーザ名(任意ですが .htpasswd の記述と連動します)
補足1:「絶対パス」の情報がない場合
パスワードファイルの絶対パスは、以下の手順で調べることができます。
- 1) 以下のソース(たった一行ですが)を、テキストエディタで新規ファイルとして作成し、test.phpという名前で保存します。
<?php echo realpath(__FILE__); ?>
- 2) FTPツールを用いて、あなたのサイトの当該ディレクトリ(保護したいディレクトリ)にアップします。
- 3) ブラウザで、[あなたのサイトの当該ディレクトリ]/test.php にアクセスすると絶対パスの情報が得られます。以下のような感じで見えるはずです。
/userX/k00ad000/WWW-KSU/test.php
test.phpより左の部分が当該ディレクトリの絶対パスです。
で、最終的に .htaccess の AuthUserFile の部分(上記の例では3行目)には、以下のように記載すればOKです。
AuthUserFile /userX/k00ad000/WWW-KSU/.htpasswd
補足2:エリア外からのアクセスを拒否する場合
例えばアクセス元を社内ネットワーク等に限定する場合は、IPアドレスによる制限が簡単です。以下のような3行を、.htaccessの中に記載します。
order deny,allow deny from all allow from 133.17.
一旦、全拒否と書いて、特定のアドレスのみ認める・・・という意味です。
この例は、133.17.*.* ネットワーク内からのアクセスであればパスします。
本学で学内限定の場合、新規のテキストファイルに上記3行のみ書けばOKです。
注)効果がない場合は、こちらをご確認ください。
.htpasswdファイルの作成
次に、ユーザ名とパスワードを記述したファイルを作成します。
ユーザ名 : パスワード 例) sampleuser:6HaskEn4F
の形で記述して、これを(たった一行ですが)ファイルとして
.htpasswdという名前で保存します。
ただし、パスワードを暗号化する必要があるので、一般には
以下のような .htpasswd作成支援ツールを用いて生成します。
IDとパスワードを入力して「生成」するとソースが表示されますので、それをコピー&ペーストして .htpasswdファイルとして保存すればOKです。
参考
Linux環境の方は、htpasswdというコマンドで簡単にファイルができます。
1)端末を開いて当該ディレクトリに移動
2)以下を実行
$ htpasswd -c .htpasswd sampleuser New password: (パスワードを入力;画面には表示されません) Re-type new password: (パスワードをもう一度入力)
3) 以下のような .htpasswdファイルが自動生成されます。
sampleuser : 6Has・・・kEn4F
動作確認
当該ディレクトリにアップ
.htaccessと.htpasswdを、あなたのサイトの当該ディレクトリ(パスワード保護をかけたいディレクトリ)内にFTPでアップロードして下さい。
当該ディレクトリにアクセスすると、認証を求めるウインドウが表示されるはずです。ユーザ名とパスワード入力して、正常に動作するか確認して下さい。
注)効果がない場合
.htaccessは、httpd.confにて利用可能な設定になっていないと使えません。
.htaccessの許可設定を変更するには、AllowOverride ディレクティブを使用します。httpd.conf 内に「AllowOverride None 」と記載があると無効です。
以下のように書き直す必要があります。
<Directory "/var/www/html"> : AllowOverride All : </Directory>
ちなみに、CentOS の場合、httpd.conf は、以下の場所にあります。
/etc/httpd/conf/
付記:Form認証について
フォーム入力によるユーザID・パスワードの送信とクッキーを用いたセッション管理を用いたユーザ認証を Form認証 といいます。
現在のWebサービスではフォームによるユーザ認証を行うのが主流です。
参考:Form認証の手順
- ユーザ登録ページでユーザが指定したキーとシークレットをサーバ側に登録。
- ユーザはログインページのフォームから、ID・パスワードを入力し送信。
- サーバ側でこれを検証し、ID・パスワードと一致すれば認証を確立。
- このとき、認証情報を保存する目的で、セッションIDを発行、
レスポンスクッキーにセッションIDを付与。 - サーバ側ではユーザのIDとセッションIDをひもづけして保管。
- 次回リクエスト時には、ブラウザがクッキーをリクエストに付けて送信。
- サーバ側はリクエストクッキー内のセッションIDとサーバ側で記録したセッションIDとを比較検証して、ユーザのログイン状態を判定。