ドキュメント
リリースカレンダー
リンク
SourceForge.jp SourceForge.JPへ
php.net PHP公式サイトへ

認証

 認証は、特定のURLにアクセス制限を設け、有効なアクセスのみ閲覧できるようにする機能です。
 SyLフレームワークでは、DBでの認証、ファイルからの認証、(PHPの機能を使用した)ベーシック認証を提供しています。

1. 認証仕様

 SyLフレームワークの認証は、特定のURL(PATHINFO)以下を認証エリアとするフィルタで実現し、 自動的に認証判定を行います。

 認証エリア内で、かつログイン実行判定と見なされるアクセスがあった場合、 ログイン認証を実行します。認証できれば、セッションにログインIDを保持した ユーザーオブジェクトをセットし、以後認証エリア内をアクセスできます。 認証できなければ、SYL_AUTH_LOGIN_ERROR_URL 定数で指定したURLにログインエラーとしてリダイレクトされます。

 認証エリア内のログイン実行判定以外は、セッションに保存されているユーザーオブジェクトにログインIDがあるか判定し、 無ければエラーとして、SYL_AUTH_SESSION_ERROR_URL 定数で指定したURLにリダイレクトされます。

認証フロー

2. 認証の種類

 SyLフレームワークでは、下記の6つの認証方式を提供しています。

認証方式 リソース 概要 補足
DB認証 DB ID/パスワードを元にDBに存在確認を行い認証する方式 SyL_DBクラスを使用します。対応DBは、SyL_DBクラスに依存。
ファイル認証 テキスト
ファイル
ID/パスワードを元にテキストファイルに存在確認を行い認証する方式  
設定ファイル
認証
設定ファイル
(defines.xml)
ID/パスワードを元に設定ファイル(defines.xml)の SYL_AUTH_LOGIN_PARAMETER 定数に存在確認を行い認証する方式  
ベーシック認証
(DB認証)
DB ベーシック認証ダイアログのID/パスワードを元にDBに存在確認を行い認証する方式 PHPのベーシック認証機能に依存
ベーシック認証
(ファイル認証)
テキストファイル ベーシック認証ダイアログのID/パスワードを元にテキストファイルに存在確認を行い認証する方式 PHPのベーシック認証機能に依存
ベーシック認証
(設定ファイル
認証)
DB ベーシック認証ダイアログのID/パスワードを元に設定ファイル(defines.xml)の SYL_AUTH_LOGIN_PARAMETER 定数に存在確認を行い認証する方式 PHPのベーシック認証機能に依存

 「DB認証」(+SSL)が一般的に使用頻度が高いと思いますが、短時間で簡単に認証機能を作成したい場合は「ベーシック認証(設定ファイル認証)」(修正するファイルは defines.xml のみ)がお手軽です。

3. パスワードハッシュ化のパターン (オプション)

 時と場合によって、リソースに対してハッシュ化(md5など)してパスワードを保存していることや、 パスワードを平文で流さないために、クライアント側でパスワードをハッシュ化して送信することもあります。 そのような状態に対応するために設定する設定ファイルの定数が SYL_AUTH_PASSWORD_HASH で、下記がそのパターン例になります。

クライアント側の
ハッシュ化
サーバー側リソースの
ハッシュ化
SYL_AUTH_PASSWORD_HASH の設定値
なし(平文) なし(平文) (なし)
なし(平文) md5 :md5
md5 md5 md5:md5

※ ハッシュ化方式は、「md5」「sha1」のみサポート
※ クライアント側とサーバーリソースを共にハッシュ化する場合、ハッシュ化方法を統一する。

4. 認証の使用方法

 認証の設定は下記の順序で行います。

 (1) 認証エリア(SYL_AUTH_PATHINFO)を決定する
 (2) 認証方式(SYL_AUTH_TYPE)を決定する
 (3) 認証タイプによるパラメータを設定する
 (4) 認証フィルタを設定する
 (5) 認証処理の確認

(1) 認証エリア(SYL_AUTH_PATHINFO)を決定する

 認証エリアは、PATH_INFOのURL階層毎に設定します。 例えば、/index.php/app/admin/... のadmin以下を認証エリアにする場合は、 認証エリアURLを /app/admin とします。
 コントローラに対する全ての PATH_INFO URLを認証エリアにする場合は、 特に認証エリアを指定する必要はありません。

(2) 認証方式(SYL_AUTH_TYPE)を決定する

 2. 認証の種類 を参考に認証方式を決定します。

(3) 認証タイプによるパラメータを設定する

 (1) で決定した認証タイプ(認証方式)を設定ファイルに記述します。 設定ファイルは、使用するアプリケーションのみに限定するようにアプリケーション用の設定ファイルに記述したほうがよいでしょう。

SYL_APP_CONFIG_DIR /defines.xml
例) /home/kwata/SyL/webapp/app/example/config/defines.xml

 ここでは、認証タイプを「DB認証」の設定例を示します。

...
  <define name="SYL_AUTH_USER_CLASS">App.User</define>
  <define name="SYL_AUTH_PATHINFO">/adimin/</define>
  <define name="SYL_AUTH_LOGIN_ERROR_URL">/index.php/login.html</define>
  <define name="SYL_AUTH_SESSION_ERROR_URL">/index.php/sesserr.html</define>
  <define name="SYL_AUTH_TYPE">DB</define>
  <define name="SYL_AUTH_TYPE_PARAMETER">users:user_id:password</define>
  <define name="SYL_AUTH_PASSWORD_HASH"></define>
...
  <define name="SYL_DB_DSN">mysql:dbname=syl;host=localhost;port=3306;
user=syl;passwd=syl</define> ...

※ それぞれの設定値については、「3.11 defines.xmlで定義される定数」の認証関連を参照。

(4) 認証フィルタを設定する

 フィルタの設定ファイルの内容は、下記のようにします。(既存のファイルに赤字の箇所を追記)
使用するアプリケーションのみに限定するようにアプリケーションフィルタとして設定したほうがよいでしょう。

SYL_APP_CONFIG_DIR /filters.xml
例) /home/kwata/SyL/webapp/app/example/config/filters.xml

...
<syl-filters>
...
<filter name="auth"
        path="(.+)\.php"
        class="SyL_FilterAuth"
        file="framework/Filter/SyL_FilterAuth.php"
        enable="true">
  <preAction>
    <arg type="component" reference="true">data</arg>
  </preAction>
  <postAction>
    <arg type="component" reference="true">data</arg>
  </postAction>
</filter>
...
</syl-filters>

(5) 認証処理の確認

 認証処理が行われるか実際にアクセスして確かめます。 例えば、認証エリアを /app/admin にした場合、 ブラウザで「(コントローラURL)?/app/admin/」にアクセスして、 セッションエラー画面に遷移するか確認します。

 ログイン認証判定を行う場合は、認証エリア外にユーザーID、パスワードを入力できる画面を作成し、 認証エリア内に対して送信(POST)し、ログイン認証できるか確認します。
その際に作成するユーザーID、パスワードの要素名は、それぞれ login_username と login_password にしてください。 (これらの値は、lib/App/User.php クラスでオーバーライドすると変更可能です)