認証ドライバの作成方法についてメモ

FuelPHPで認証用に用意されているAuthパッケージがある。Authパッケージを既に実装しているsimpleauthドライバを使用すると簡単に認証機能を実装できる。しかし、simpleauthの仕様にあわせてテーブルカラムを用意しなければならなそう?なので、中で何をやっているか解析しつつ独自にドライバを作成。

※simpleauth仕様:
http://press.nekoget.com/fuelphp_doc_1.2/packages/auth/simpleauth/intro.html#/database

■参考
•公式サイト
http://press.nekoget.com/fuelphp_doc_1.2/packages/auth/drivers.html
※情報が少なく全然役に立たない

•公式ドキュメント
http://press.nekoget.com/fuelphp_doc_1.2/packages/auth/simpleauth/login.html
http://press.nekoget.com/fuelphp_doc_1.2/packages/auth/simpleauth/groups.html
http://press.nekoget.com/fuelphp_doc_1.2/packages/auth/simpleauth/acl.html
※英語だがAPIマニュアルとして多少役立つ

•simpleauth[packages/auth/classes/auth/配下]の実装
•親クラスdriver.php[packages/auth/classes/auth/配下]の実装

※取り込み元のコードなのでほとんどこれらを参考

実装要件

今回はドライバ名は「baseauth」にします
そしてuserテーブル構成は以下のようにします

CREATE TABLE `tb_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL,
`group` int(11) NOT NULL DEFAULT '1',
`email` varchar(255) NOT NULL,
`last_login` int(11) NOT NULL,
`auth_type` int(11) NOT NULL DEFAULT '1',
`salt` varchar(255) NOT NULL,
`dlt_flg` tinyint(1) NOT NULL,
`created_at` int(11) NOT NULL,
`updated_at` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username_email` (`username`,`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

auth_typeはログイン画面のbasic認証か各SNS(Twitter,Facebook etc)認証かのタイプを格納するつもり(とりあえず)。ここではbasic認証のみのため、常に1で良い。dlt_flgは削除されたときに物理削除をさけるため、論理削除とするため。groupは今回は管理者adminと一般ユーザのuserのみとする。

ドライバの準備

まずは下記3点を準備する。

•Login (Auth_Login_Driver).
•Group (Auth_Group_Driver).
•Acl (Auth_Acl_Driver).

公式サイト:http://press.nekoget.com/fuelphp_doc_1.2/packages/auth/drivers.html

つまり
fuel/app/classes/authフォルダへ以下3つのフォルダを用意し、それぞれにドライバ名をつけたphpファイル「baseauth.php」を用意する。
fuel/app/classes/auth/login
fuel/app/classes/auth/group
fuel/app/classes/auth/acl

親クラスdriver.php内で抽象メソッドとして宣言しているものをとりあえずbaseauth.phpへすべて実装しておきます。

abstract protected function perform_check();
abstract public function validate_user();
abstract public function login();
abstract public function logout();
abstract public function get_user_id();
abstract public function get_groups();
abstract public function get_email();
abstract public function get_screen_name();

 

abstract public function member($group, $user = null);
abstract public function get_name($group);

 

abstract public function has_access($condition, Array $entity);

これら各メソッドの処理を実装したらドライバができるはずです。それぞれメソッドでなにをやるかはsimpleauthの実装を見ながらゆっくり考えていこうと思います。

configファイル準備

simpleauthのconfigファイルもそのまま流用。
「fuel/packages/auth/config」フォルダにあるsimpleauth.phpを「fuel/app/config」フォルダにbaseauth.phpとしてコピー。
設定情報を下記のように変更。ついでに不要なものは削除。
login_hash_saltはログイン認証後にSessionの認証をするために使用する文字列。ある程度の文字列にするとセキュリティ的に有効。simpleauthの仕様と同様に固定指定とする。

return array(
'login_hash_salt' => 'ZegakljelktPm16AA$Y/dlgadkjjelijmaaZe',
'groups' => array(
1 => array('name' => 'Users', 'roles' => array('user')),
100 => array('name' => 'Administrators', 'roles' => array('admin')),
),
'auth_type' => array(
1 => array('type' => 'Basic'),
2 => array('type' => 'Twitter'),
3 => array('type' => 'Facebook'),
),
);

authファイル準備

「fuel/packages/auth/config」フォルダにあるauth.phpを「fuel/app/config」フォルダにコピー。
そしてBaseAuthをドライバとして登録。
saltは親クラスdrivers.phpでパスワードに付与して暗号化する文字列。ある程度複雑な文字列の方がセキュリティ上よい。ただ固定していのため、ブルートフォースに負ける可能性が高い。別メモ参照

return array(
'driver' => 'BaseAuth',
'verify_multiple_logins' => false,
'salt' => 'b70Ga(Z0s4zu&1!cR#DoXrAgaa7&6aTsM$C/)ZmkZ00bkaz',
);

今回はここまで

その他おすすめの備忘録

Tagged with:
 

2 Responses to [FuelPHP]独自オリジナル認証ドライバをsimpleauthを参考に実装する1

  1. Yoji Ueda より:

    [FuelPHP]独自オリジナル認証ドライバをsimpleauthを参考に実装する1 | Memorandum blog – http://to-developer.com/blog

  2. Masateru より:

    [FuelPHP]独自オリジナル認証ドライバをsimpleauthを参考に実装する1 | Memorandum blog – http://to-developer.com/blog

コメントを残す