2009-07-31 10 views
2

私はCASを使用してシングルサインオン認証を提供する大学の部署で働き、このCASサービスを使用する必要があるCakePHPアプリケーションを作成しています。私は、コード記述する必要があります。ユーザーは CakePHPアプリケーションでCASセッションチェックコードをどこに置くべきですか?

  • にログインしているかどうかを確認するためにCASサーバーとの

    • チェックは、サーバーからいくつかの資格情報を引き出しを
    • そうかどうかを確認する内部ACLに対する資格情報、などアプリケーションにアクセスできる人の集合は、CASサービスにログインできるセットのサブセットです。
    • CASシステムの外部に特別な管理者を作成する(すべての頭痛を伴う)管理者ユーザーや、特定のCASユーザー(異なる頭痛を伴うユーザー)を促進することによって、管理ユーザーにいくつかの仕組みを提供します。

    CakePHPの新人として、私はしばしば「所属していない」コードを貼り付ける場所に苦労します。私が知ることができる最高ののは、このコードはApp ControllerのbeforeFilterメソッドに入っているはずですが、これはそのための最良の場所ですか?また、スタックで管理ルーティングを利用するには低すぎますか?

    最後に、私はCakePHPがAuthコンポーネントとACLコンポーネントの両方を提供していることを知っていますが、それらを使用して調べると、外部認証サービスとのインタフェースには適していないように見えます。私は間違っていますか、これらのどちらかが私がしなければならないことに適していますか?

    ありがとうございます!

  • 答えて

    1

    Cakeのcore componentsを見ると、CASの要件はコンポーネントが一般的に使用されているタイプ(つまり認証/セッション)に適合していることがわかります。

    CasAuthComponentを作成することをおすすめします。あなたが既存のコアAuthComponentの上に構築することを望む場合には、extending AuthComponentに関するいくつかの情報が以前の私の回答にあります。

    成分(本質的に再利用可能な制御コード)他の(例えば、セッションのような)成分と制御ユーザフロー(例えばリダイレクト)コアAuthComponentは、実際のモデルからの情報を取得する、こと

    注使用、モデルと相互作用することができます(デフォルトでUserモデル)ので、似たようなことができます。

    CasAuthComponentは、データのCRUD操作(主にユーザーの取得)を担当する外部ユーザーモデル(CasUserかもしれません)を作成します。

    これをさらに進め、CASの相互作用をこのモデルで使用されるデータソースに抽象化することができますが、他のモデルでコードを再利用する予定がない場合は厳密には必要ありません。

    最終結果は、プラグインにパッケージ化することができる:

    • CasAuthComponentapp/plugins/cas/controllers/components/cas_auth.php
    • CasUserapp/plugins/cas/models/cas_user.php
    • CasSource

    とに用いられる(app/plugins/cas/models/datasources/cas_source.php)[オプション]あなたのアプリケーションをあなたのapp_controllerに入れてあなたのアプリケーション:

    public $components = array('Cas.CasAuthComponent'); 
    

    あなたはケーキからユーザーを管理できるようにしたい場合は、また、ユーザがCasUserモデル(つまりと対話することを可能にするプラグインのコントローラとビューを含めることができます。 $this->CasUser->save())。

    +0

    コア 'AuthComponent'の使用を計画していない場合は、' AuthComponent'として 'CasAuthComponent'という名前を付けることができます。また、あなたのMySQLデータベースにローカルユーザ情報を保持する計画がない場合、 'CasUser'を' User'と名付けることもできます。しかし、もしあなたがそれを 'ExternalUser'と呼んで、そのセマンティックな意味をデータソース(CAS)から切り離すことができます。 – deizel