Pear の中に Auth_HTTP というパッケージがあります。 このパッケージを利用することでベーシック認証を行うことができます。 Auth_HTTPは、Authクラスから派生しており、 ユーザーやパスワードの保存先(認証先)は、 非常に豊富で、ファイルやDB、認証サーバー等柔軟に対応できます。
Passwd ファイルを使用してベーシック認証を行うには、いくつか必要なものが存在します。
暗号化をサポートするmcryptライブラリは、ヘルプには「この拡張モジュールはWindows環境では利用できません。」 と記述されています。しかし、Windows用として作成されているlibmcrypt.dllをWindowsのSystem32に インストールすることで使用できるようです。(libmcrypt.dll)
次に、MD5,SHAl,GOSTなどのハッシュを作成するmhashライブラリが必要になります。 このmhashライブラリを使用するには、phpをインストールしたフォルダのdllsフォルダ内にある libmhash.dllをWindows\system32フォルダにコピーします。
各dllの準備ができたところで、php.iniの次のコメントを削除します。
extension=php_mcrypt.dll extension=php_mhash.dll
Linuxの場合、mcryptやmhashは、あらかじめ別途インストールしておく必要があります。 もし、最初のインストールの時、コンフィギュレーション・オプションに指定していない場合 ライブラリをインストール後、phpをコンパイルしなおす必要があります。
Pearのパッケージをインストールします。 必要なパッケージは、 Crypt_CHAP , File_Passwd , File , DB 等が必要になります。
pear install [パッケージ名]
Passwdファイルを使った認証を次に示します。(Optionの渡し方が正しいかどうかは不安が残ります。) 通常、こういった使い方はしないのかなという部分も見られます。 例えば、addUserメソッドが実装されているのですが、下記オプションでは正常に動作しません。 Optionに配列ではなく、ファイル名を与えるとユーザーとパスワードが作成されます。
<?php require_once "Auth/HTTP.php"; $params = Array(".htpasswd","authType"=>"basic","cryptType"=>"MD5"); $objAuth = new Auth_HTTP("File",$params); // realm領域名 $objAuth->setRealm('Please Enter Your Password'); // 認証をキャンセルや認証エラーした際に表示されるメッセージ $objAuth->setCancelText('<h2>Authorization Required</h2>'); // 認証プロセスの開始 $objAuth->start(); if($objAuth->getAuth()) { echo $objAuth->username . "の認証に成功!"; } ?>
上記コードは、Windows上で試したコードです。 Windows上の Apache2.0.54 のhtpasswdコマンドでは、デフォルトがMD5で暗号化されるようで Auth_HTTPでは、デフォルトが crypt_des のようです。 このため、OptionにcryptTypeをMD5と指定しています。 また、Optionに配列ではなくファイル名(パスワードを保存した)のみを指定した場合、authTypeが 正しく指定されなかったため、OptionにauthTypeをbasicとして指定しています。
次にrealm領域名、認証をキャンセルや認証エラーした際に表示されるメッセージを設定します。
実際に、WWW-Authenticateを送っているのは、start()関数になります。 また、認証処理もこの関数内で行われているようです。
getAuthは、認証済みかどうかを取得する関数になります。
少し強引な例も紹介しておきます。
<?php require_once "Auth/HTTP.php"; $params = ".htpasswd"; $objAuth = new Auth_HTTP("File",$params); // realm領域名 $objAuth->setRealm('Please Enter Your Password'); // 認証をキャンセルや認証エラーした際に表示されるメッセージ $objAuth->setCancelText('<h2>Authorization Required</h2>'); $objAuth->authType = "basic"; // 認証プロセスの開始 $objAuth->start(); if($objAuth->getAuth()) { echo $objAuth->username . "の認証に成功!"; } ?>
Copyright 1997-2010 BBB All rights reserved.