LogoMark.png

BasicAuthentication の変更点


#author("2019-11-06T18:09:19+09:00;2019-11-06T18:08:58+09:00","default:inoue.ko","inoue.ko")
*Basic認証
Basic Authentication
~

//&color(red){''注)'' 現在のWebサービスではForm認証を行うのが主流です。};> [[付記>#form]]
//~

Basic認証とはWebサイトへのアクセスに対して、
ユーザー名とパスワードの入力を求めるユーザー認証の方法です。

当該サイトのフォルダに、 ''.htaccess'' と ''.htpasswd'' という
2つのファイルを作って置くことで実現します。

-いずれもテキストファイルなので、[[テキストエディタ>TextEditor]]があれば作れます。
-尚、 .htaccess と .htpasswd のような [.]ではじまるファイルは、一般に''隠しファイル''として扱われます。「保存したら見えなくなった(隠れた)」という状態になりますので、PCのフォルダ表示設定で「隠しファイルを表示」の状態にして作業して下さい。
~

***CONTENTS
#contents2_1
~


**.htaccessファイルの作成
.htaccessファイルは、httpd.confで設定されているApache(httpサーバー)の各種設定を、ディレクトリごとに独自に変更するためのファイルです。
Apacheは、httpでアクセスされたフォルダに.htaccessというファイルがあると、それをまず読んで、IDとパスワードを要求します。

記述例
 AuthType Basic
 AuthName "Basic Authentication Sample"
 AuthUserFile /home/sampleuser/public_html/test/.htpasswd
// AuthUserFile /user8/k00ad000/WWW-KSU/.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.*.* ネットワーク内からのアクセスであればパスします。
&small(本学で学内限定の場合、新規のテキストファイルに上記3行のみ書けばOKです。);

注)効果がない場合は、[[こちら>#directive]]をご確認ください。
~
~

**.htpasswdファイルの作成
次に、ユーザ名とパスワードを記述したファイルを作成します。
 ユーザ名 : パスワード 例)  sampleuser:6HaskEn4F 
の形で記述して、これを(たった一行ですが)ファイルとして
 .htpasswdという名前で保存します。
ただし、''パスワードを暗号化する必要がある''ので、一般には
以下のような .htpasswd作成支援ツールを用いて生成します。
IDとパスワードを入力して「生成」するとソースが表示されますので、それをコピー&ペーストして .htpasswdファイルとして保存すればOKです。

[[htpasswdファイル生成|lufttooles>http://www.luft.co.jp/cgi/htpasswd.php]]

''参考''
Linux環境の方は、htpasswdというコマンドで簡単にファイルができます。
1)端末を開いて当該ディレクトリに移動
2)以下を実行
 $ htpasswd -c .htpasswd sampleuser
 New password: (パスワードを入力;画面には表示されません)
 Re-type new password: (パスワードをもう一度入力)
3) 以下のような .htpasswdファイルが自動生成されます。
 sampleuser : 6Has・・・kEn4F
~
~

**動作確認

***当該ディレクトリにアップ
.htaccessと.htpasswdを、あなたのサイトの当該ディレクトリ(パスワード保護をかけたいディレクトリ)内にFTPでアップロードして下さい。

当該ディレクトリにアクセスすると、認証を求めるウインドウが表示されるはずです。ユーザ名とパスワード入力して、正常に動作するか確認して下さい。

&aname(directive);
~

***注)効果がない場合
.htaccessは、httpd.confにて利用可能な設定になっていないと使えません。
.htaccessの許可設定を変更するには、AllowOverride ディレクティブを使用します。httpd.conf 内に「AllowOverride None 」と記載があると無効です。
以下のように書き直す必要があります。
 <Directory "/var/www/html">
   :
    AllowOverride All
   :
 </Directory>
ちなみに、CentOS の場合、httpd.conf は、以下の場所にあります。
 /etc/httpd/conf/
~
~

&aname(form);
#hr

***付記:Form認証について

フォーム入力によるユーザID・パスワードの送信とクッキーを用いたセッション管理を用いたユーザ認証を ''Form認証'' といいます。
現在のWebサービスではフォームによるユーザ認証を行うのが主流です。

参考:Form認証の手順
-ユーザ登録ページでユーザが指定したキーとシークレットをサーバ側に登録。
-ユーザはログインページのフォームから、ID・パスワードを入力し送信。
-サーバ側でこれを検証し、ID・パスワードと一致すれば認証を確立。
-このとき、認証情報を保存する目的で、セッションIDを発行、
レスポンスクッキーにセッションIDを付与。
-サーバ側ではユーザのIDとセッションIDをひもづけして保管。
-次回リクエスト時には、ブラウザがクッキーをリクエストに付けて送信。
-サーバ側はリクエストクッキー内のセッションIDとサーバ側で記録したセッションIDとを比較検証して、ユーザのログイン状態を判定。
~
~
~
~