Ext JS に関しては,新しい記事は Sunvisor Lab. ExtJS 別館 にあります。そちらもよろしくお願いいたします。

Ext.DirectとxFrameworkPXでの認証

Ext.DirectとxFrameworkPXでのシステムで,システム利用前に認証を行うという場合を考えます。

一般的なWebシステムの場合,ユーザー名/パスワードでログインすると,セッションにログイン情報が記録され,その後の処理ではセッションでログイン状況をチェックしてから処理をする。というのが一般的な方法だと思います。

では,Ext.DirectとxFrameworkPXでの場合はどうなるでしょうか。ログインは,ExtJSでやりましょうか。そしたらログインの認証をサーバーに問い合わせるのは,Ext.Directにしましょうか。userとかのモジュール作ってauthとかのメソッド作れば簡単にできそうです。それが通らなかったら,終わりという風に作ればいい。

本当に,これでセキュリティが守れるのでしょうか。Ext.Directでは,直接サーバー側のメソッドをコールできます。だれかが,私のサーバーのメソッドをコールするようなコードを書いたら,ログインなしでもデータを取り出せてしまうんじゃないでしょうか。ということは,Ext.Directで呼び出される関数全てにおいて,認証がされているかどうかを判断しなければならないのじゃないでしょうか。

セッションを使う?

認証の情報を保存しておくのには普通は,セッションが使われます。xFrameworkPXでは,Sessionコンポーネントがセッションを扱います。これは,コンポーネントですからコントローラーから呼び出されます。

モジュールからはコンポーネントを利用できませんから,Sessionコンポーネントは利用できません。どうしましょ。userモジュールにセッション管理させますか?でも,モジュールから他のモジュールは呼べないですよね。だったらビヘイビアか。

Sessionビヘイビアを作って,user.authメソッドが成功したらセッションをスタートするっていうのはどうでしょうか。他のコンポーネントもSessionビヘイビアを参照して,セッションが有効なら処理をするという感じ。

実はこの辺のことを考えていて,「Ext Direct」の記事でパラメータを渡す代わりにやったやり方ってまずかったんじゃないかって思いはじめました。あの処理ではモジュールクラスのローカル変数にパラメータを保存して直後にメソッドをコールするという方式ですが,複数からのアクセスがある場合は,うまく動かない可能性がありますよね。だから,あれも本来はセッションに値を保存する方法をとらなければならないはずです。そうするとセッションを扱うビヘイビアが必須のような気がしてきました。

executeメソッドのオーバーライド

もう一つ考えたのが,ExtDirectコントローラーのexecuteメソッドをオーバーライドして,セッションが有効でなければ,APIやRouterの処理をしないという方法です。そうすれば,認証ができていなければExt.Directでサーバーサイド関数を利用することができません。これも簡単な方法かもしれません。が,セッション変数が利用できないというのは解決できません。う~ん。

 

トラックバック


URL から "-MoIyadayo" を削除してトラックバックを送信してください。
トラックバックは承認後に表示されます。