我曾经有过类似的情况:几个月前的跨框架身份验证zend + codeigniter ......
无论如何,这是我更喜欢的:
- 在我的 Wordpress 网站上设置授权 API。
- 在 cake 中设置单独的 auth 组件。
- 当用户点击蛋糕应用程序中的受保护页面然后手动登录用户时,ping WP 端点。(这将创建第二组身份验证 cookie)
在这里,我建议做一个可行的小改动。
确保您拥有 SSO 的令牌系统。如,当人在 Wordpress 上登录时,设置另一个 cookie,该 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 登录”时,它会返回请求的信息,例如电子邮件地址、用户名甚至个人资料图片。可以进一步添加到我们的数据库中...强烈建议保留不同的数据库:)
对于您的第二个和第三个问题:两个站点是否应该引用数据库中的相同用户表?除非您使用相同的数据,否则建议使用不同的数据库。或者说改变软件平台。
我应该将特定于站点的用户行复制到每个应用程序的单独用户表中吗?是的,这应该自动发生。一旦您在主站点上注册,什么都不会发生,一旦您已经登录然后转到站点 B,事情应该会发生......一旦登录,用户信息总是可以被请求:) 这样,新站点将处于活动状态用户!2只鸟?
不要让自己复杂化(打扰)什么是有效的,而是专注于如何在短期内实现什么。SSO - 登录 - 受限页面 - 寻找登录 - 登录 - 如果已经登录 - 获取用户信息 - 如果用户信息存在 - 通过辅助站点登录或设置新的用户信息。完毕!
我们开发人员喜欢流程图!我们不是吗?我刚刚创建了一个:
![自定义单点登录实施流程图](https://i.stack.imgur.com/fxHOe.png)
进一步的答案:
“获取用户信息”阶段是否意味着我们从登录的站点获取用户信息,并在另一个站点中自动创建一个新用户(行)?
理想情况下,您会在用户“允许”使用他们的信息之前征得用户的许可,但这会改变您的隐私政策。
换句话说,一个站点处理所有注册/用户创建,而另一个站点只是等待该用户出现并触发自动创建。或者当用户在一个站点上注册时,两个数据库都插入了一个用户行?
一个站点处理所有注册/用户创建,而另一个站点只是等待该用户出现并触发自动创建。你可以两者兼得。在您的网站上注册,也是基于触发器的自动创建。取决于你的策略。或者当用户在一个站点上注册时,两个数据库都插入了一个用户行?那将是一种可怕的做法!它将扼杀 SSO 的动机。SSO 的动机是创建一个可供用户使用的身份验证系列,这样他们就不必时不时地注册不同的网站。一次仅更新一个数据库,并在需要时更新其他数据库:)
问题?:)