我曾经有过类似的情况:Zend + Codeigniter 跨框架身份验证,这是几个月前的事情...
无论如何,这是我想要的:
- 在我的WordPress网站上设置授权API。
- 在Cake中设置单独的auth组件。
- 当用户访问cake应用程序中的受保护页面时,ping WP端点,然后手动登录用户。 (这将创建第二组身份验证cookie)
在这里,我建议稍作更改,这是可行的。
确保您拥有SSO的令牌系统。 也就是说,当人们登录WordPress时,设置另一个带有标记的cookie:Token将是用户名+密码(哈希)+秘密密钥,它将在WordPress和CakePHP之间相同。 在任一网站上,查找cookie并手动登录用户或仅执行数据库查找。 对那个cookie进行哈希很重要!
但是,如果该站点使用不同的域,则您可能需要重新制定策略:
我曾经有过不同的域名。 在登录或未经授权的页面上,我会ping其他网站并显示其登录框。 在另一个网站上,如果用户已登录,则会获得登录后的页面,如果请求URI发送了令牌,则我们执行正常操作并将授权令牌返回给此(当前)域。
简单说:
网站A = WordPress&网站B = CakePHP
当需要授权时,Site B访问一个页面,则向Site A发出登录请求(类似于使用Facebook登录),其中将通过Token(私钥)和REQUEST_URI请求SSO验证表在Site A上,如果该人已经登录,则Site A将返回一个令牌(通过POST方式)。然后再使用Site B的私钥解密该令牌并将用户登录。 Site B和A的私钥将是相同的。
希望这样可以理解。
有问题吗? :)
回答您在评论中提出的问题:
理想情况下,我们为什么要使用SSO?因为有很多限制。例如:你拥有一个包含一百万行、超过一千个表格的数据库,并需要在已有的大型应用程序上添加一个模块...所以,相反地,你将会使用另一个数据库... SSO 将返回用户信息,这些信息可以进一步复制。例如,当你点击“使用 Facebook 登录”时,它会返回请求的信息,如电子邮件地址、用户名或甚至是个人资料图片。这些信息可以进一步添加到我们的数据库中...强烈建议保留不同的数据库 :)
对于你的第二和第三个问题:
这两个站点是否应该引用数据库中的同一用户表? 建议使用不同的数据库,除非你正在使用相同的数据。或者说改变软件平台。
我是否应该将特定于站点的用户行复制到每个应用程序的单独用户表中?是的,应该自动发生这种情况。一旦你在主站点注册,什么都不会发生,在你已经登录并转到B站点之后事情就会发生...一旦登录,用户信息总是可以请求的:)这样新站点就会有活跃的用户了!两全其美?
不要让自己陷入如何工作的复杂问题,而应该集中精力在短期内可以实现的目标上。SSO-登录-限制页面-注意登录-要么登录-如果已经登录-获取用户信息-如果用户信息存在-通过次要站点登录或设置新用户信息。完成!
我们开发人员喜欢流程图!不是吗?我刚创造了一个:
更多答案:
“获取用户信息”阶段是否意味着我们从已登录的站点中获取用户信息,并自动在其他站点创建一个新用户(行)?
理想情况下,你将在允许使用他们的信息之前征得用户的同意,但这取决于你的隐私政策。换句话说,一个网站负责所有的注册/用户创建工作,而另一个网站只等待该用户出现并触发自动创建。或者说,在一个网站上注册时,两个数据库都插入了一个用户行吗?
可以同时拥有这两种方式。在您的网站上注册并进行基于触发器的自动创建取决于您的策略。如果在一个网站上注册时,两个数据库都插入了一个用户行,这将是一种可怕的做法!它将破坏SSO的原则。 SSO的原则是创建一个身份验证家族,可以供用户使用,以便他们不必为不同的网站频繁注册。每次只更新一个数据库,需要时再更新另一个 :) 有疑问? :)