【问题标题】:Where should I put CAS session checking code in a CakePHP application?我应该将 CAS 会话检查代码放在 CakePHP 应用程序中的什么位置?
【发布时间】:2009-07-31 21:21:55
【问题描述】:

我在一所大学的一个部门工作,该部门使用CAS 提供单点登录身份验证,并且正在编写一个需要使用此 CAS 服务的 CakePHP 应用程序。我需要编写以下代码:

  • 检查 CAS 服务器以查看用户是否已登录
  • 如果是,则从服务器中提取一些凭据
  • 根据内部 ACL 检查凭据,因为可以访问应用程序的一组人员是可以登录 CAS 服务的一组人员的子集。
  • 为管理员用户提供一些机制,通过在 CAS 系统之外创建特殊的管理员用户(会带来很多麻烦)或提升某些 CAS 用户(会带来不同的麻烦)。

作为 CakePHP 的新手,我经常纠结在哪里粘贴“不属于”的代码。我能想到的最好的办法是这段代码应该放在 App Controller 的 beforeFilter 方法中,但我想知道,这是最好的地方吗?此外,堆栈是否太低而无法利用管理路由?

最后,我知道 CakePHP 提供了 Auth 和 ACL 组件,但是当我研究使用它们时,它们似乎不适合与外部身份验证服务交互。我错了吗,其中任何一个都适合我需要做的事情吗?

谢谢!

【问题讨论】:

    标签: authentication cakephp cas


    【解决方案1】:

    如果您查看 Cake 的 core components,您会发现您的 CAS 要求符合组件通常用于的事物类型(即身份验证/会话)。

    我建议创建一个CasAuthComponent。在我以前的回答中,有一些关于extending AuthComponent 的信息,如果您希望在现有核心AuthComponent 之上构建,这些信息可能会很有用。

    组件(本质上是可重用的控制器代码)可以与模型交互,使用其他组件(例如 Session)并控制用户流程(例如重定向)

    请注意,核心 AuthComponent 实际上是从模型(默认为用户模型)中检索信息,因此您可以执行类似的操作。

    您创建的CasAuthComponent 可以$use 一个外部用户模型(CasUser 也许)负责对数据进行 CRUD 操作(主要是检索用户)。

    您可以更进一步,将 CAS 交互抽象到此模型使用的数据源中,但如果您不打算在其他模型中重用代码,这并不是绝对必要的。

    最终结果可以打包成插件:

    • CasAuthComponent (app/plugins/cas/controllers/components/cas_auth.php)
    • CasUser (app/plugins/cas/models/cas_user.php)
    • CasSource (app/plugins/cas/models/datasources/cas_source.php) [可选]

    并通过在您的 app_controller 中放入以下内容在您的应用程序中使用:

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

    如果您希望能够从 Cake 管理用户,您还可以在插件中包含控制器和视图,从而允许用户与 CasUser 模型(即 $this->CasUser->save())进行交互。

    【讨论】:

    • 如果您不打算使用核心 AuthComponent,可以将 CasAuthComponent 命名为 AuthComponent。此外,如果您不打算在 MySQL 数据库中维护本地用户信息,您可以将 CasUser 命名为 User。但是,如果您这样做,您可能希望将其称为 ExternalUser 以将其语义含义与数据源 (CAS) 分离。
    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2014-10-24
    • 2012-03-03
    • 2015-10-19
    • 2011-06-30
    相关资源
    最近更新 更多