Wordpress和CakePHP之间的单点登录(SSO)

eme*_*his 9 cookies wordpress authorization cakephp single-sign-on

我有一个现有的Wordpress网站.计划是使用cakePHP框架重建站点.由于时间限制,我想一次更换一个Wordpress网站的各个部分.这意味着两个应用程序将在一段时间内并排运行.我需要使用Wordpress提供的授权来控制对cakePHP应用程序的访问.我不确定这样做的最好方法.我已经看到了很多类似的问题,但我还没有找到一个明确的解决方案.

我正在考虑两种方法:

计划A:

  • 配置Cake以查找Wordpress的授权cookie.
  • 配置Cake来查看Wordpress的数据库.
  • 借用一些Wordpress的授权逻辑来教授Cake的Auth组件如何验证WP用户.

B计划:

  • 在我的Wordpress网站上设置授权API.
  • 在蛋糕中设置单独的auth组件.
  • 当用户点击蛋糕应用程序中的受保护页面然后手动登录用户时,ping WP端点.(这将创建第二组身份验证cookie)

这些中的任何一个听起来都是正确的方法吗?有一个更好的方法吗?

有用的参考资料:关于Cake会话处理,Cake Auth组件文档,Cake Auth教程,WP授权简要概述的文章,更深入地了解wordpress授权

更新 我们已经开始研究这个了,看起来它会起作用,但是有一个涉及密码散列的非常棘手的方面需要保证自己的问题.如果您关注此主题,可能需要查看.

Kar*_*rma 10

我曾经有类似的情况:几个月前的跨框架认证zend + codeigniter ...

无论如何,这是我更喜欢的:

  • 在我的Wordpress网站上设置授权API.
  • 在蛋糕中设置单独的auth组件.
  • 当用户点击蛋糕应用程序中的受保护页面然后手动登录用户时,ping WP端点.(这将创建第二组身份验证cookie)

在这里,我建议稍作改动,这是可行的.

确保您有一个SSO令牌系统.在人们登录Wordpress时,设置另一个将有令牌的cookie:令牌将是用户名+密码(哈希)+密钥,在Wordpress和CakePHP之间将是相同的.在任一站点上,查找cookie并手动登录用户或仅执行数据库查找.哈希对于那个cookie很重要!但是,如果网站使用不同的域,您可能需要重新制定策略:

我曾经有过不同的域名.在登录或未授权的页面,我会ping另一个网站并打开他们的登录框.在另一个网站上,如果用户已登录,则会获得帖子登录页面,如果请求URI已发送令牌,我们会执行正常操作并将授权令牌返回到此(当前)域.

简单来说:

站点A = WordPress和站点B = CakePHP

站点B命中一个需要授权的页面,然后ping站点A进行登录(当你进行Facebook登录时会发生这种情况),这将通过令牌(私钥)和REQUEST_URI请求,这将是SSO的一部分站点A上的验证表,如果此人已登录,则站点A将返回(通过POST)令牌,该令牌将通过站点B的(私钥)进行解密并将用户登录.B和A的私钥会是一样的.

希望这是可以理解的.

有问题吗?:)

在评论中回答您的问题:

理想情况下,为什么我们使用SSO?我们因为许多限制而使用它.例如:你有一个数据库,说...一百万行,超过一千个表,你需要在你的巨大应用程序上添加一个模块...所以,相反,你将使用另一个数据库... SSO将返回用户信息,可以进一步复制.例如,当您点击"使用Facebook登录"时,它会返回所请求的信息,例如电子邮件地址,用户名或甚至个人资料图片.可以进一步添加到我们的数据库...强烈建议保留不同的数据库:)

对于您的第2和第3个问题:两个站点是否应该引用数据库中的相同用户表?建议使用不同的数据库,除非您使用的是相同的数据.或者说改变软件平台.

我应该将特定于站点的用户行复制到每个应用程序的单独用户表中吗?是的,这应该自动发生.一旦您在主站点上注册,没有任何反应,一旦您已经登录然后进入站点B就会发生一些事情......一旦登录,总是可以请求用户信息:)这样,新站点就会有效用户!2只鸟?

不要让自己变得复杂(打扰)自己如何运作,而是集中精力于如何在短时间内实现什么.SSO - 登录 - 受限制的页面 - 注意登录 - 登录 - 如果已登录 - 获取用户信息 - 如果存在用户信息 - 通过辅助站点登录或设置新用户信息.完成!

我们开发人员喜欢流程图!不是吗?我刚刚创建了一个:

自定义单点登录实现的流程图

更多答案:

"获取用户信息"阶段是否意味着我们从登录的站点获取用户信息,并在另一个站点中自动创建新用户(行)?

理想情况下,您可以在用户"允许"使用其信息之前征得用户的许可,但这会改变您的隐私政策.

换句话说,一个站点处理所有注册/用户创建,另一个站点等待该用户显示并触发自动创建.或者,当用户在一个站点上注册时,BOTH数据库会插入一个用户行?

一个站点处理所有注册/用户创建,另一个站点等待该用户显示并触发自动创建.你可以两个都有.在您的网站上注册以及基于触发器的自动创建.取决于你的策略.或者,当用户在一个站点上注册时,BOTH数据库会插入一个用户行?那将是一个可怕的做法!它将扼杀SSO的动机.SSO的动机是创建一个可供用户使用的身份验证系列,这样他们就不必每次都为不同的网站注册.一次只更新一个数据库,需要时更新其他数据库:)

有问题吗?:)