我应该在哪里将CAS会话检查代码放在CakePHP应用程序中?

时间:2009-07-31 08:54:02

标签: authentication cakephp cas

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

  • 检查CAS服务器以查看用户是否已登录
  • 从服务器提取一些凭据(如果是)
  • 根据内部ACL检查凭据,因为可以访问应用程序的人员是可以登录CAS服务的集合的子集。
  • 为管理员用户提供一些机制,可以通过在CAS系统之外创建特殊管理员用户(带来所有令人头疼的问题),也可以通过推广某些CAS用户(带来不同的头痛)。

作为CakePHP的一个相对较新的人,我经常在哪里坚持“不属于”的代码。我能想到的最好的是这个代码应该放在App Controller的beforeFilter方法中,但我想知道,这是最适合它的地方吗?此外,堆栈中是否太低以利用管理路由?

最后,我知道CakePHP提供了Auth和ACL组件,但是当我使用它们时,它们似乎不适合与外部认证服务连接。我错了,这些都不适合我需要做的事情吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您查看Cake的core components,您可以看到您的CAS要求符合组件通常用于的类型(即.auth / session)。

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

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

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

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

您可以更进一步,将CAS交互抽象为此模型使用的数据源,但如果您不打算重复使用其他模型中的代码,则不一定非必要。

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

  • CasAuthComponentapp/plugins/cas/controllers/components/cas_auth.php
  • CasUserapp/plugins/cas/models/cas_user.php
  • CasSourceapp/plugins/cas/models/datasources/cas_source.php)[可选]

通过在app_controller中添加以下内容在您的应用程序中使用:

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

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