10

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

我正在考虑两种方法:

计划A:

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

B计划:

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

这些听起来像是正确的方法吗?有一个更好的方法吗?

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

更新 我们已经开始着手解决这个问题,看起来它会起作用,但是涉及密码散列的一个非常棘手的方面需要它自己的问题。如果你正在关注这个线程,你可能想看看。

4

3 回答 3

11

我曾经有过类似的情况:几个月前的跨框架身份验证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 - 登录 - 受限页面 - 寻找登录 - 登录 - 如果已经登录 - 获取用户信息 - 如果用户信息存在 - 通过辅助站点登录或设置新的用户信息。完毕!

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

自定义单点登录实施流程图

进一步的答案:

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

理想情况下,您会在用户“允许”使用他们的信息之前征得用户的许可,但这会改变您的隐私政策。

换句话说,一个站点处理所有注册/用户创建,而另一个站点只是等待该用户出现并触发自动创建。或者当用户在一个站点上注册时,两个数据库都插入了一个用户行?

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

问题?:)

于 2013-03-15T07:29:26.047 回答
0

我做过一次。我没有任何片段和/或任何引用。但认为它可能会有所帮助。

  1. 将 WP 和 CakePHP 都配置为使用相同的会话,您可以通过会话 ID 和会话名称来执行此操作,

  2. 当用户注册您的网站时,请同时使用 WP 和 CakePHP 进行注册,

  3. 选择一个从前端处理登录视图的框架。我选择了 CakePHP,因为我更精通它,一旦登录成功,在其他框架的数据库中找到相同的用户并使用他们的身份验证系统对用户进行身份验证。

希望这可以帮助 !!!

于 2013-03-08T15:16:49.870 回答
0

建议:

  1. 如果您正在构建一个封闭系统,这意味着您必须登录才能访问站点中的任何有用信息,那么您可以使用CAS。我知道它主要被大学使用,但对于封闭系统它是有效的。

(如果您需要处理匿名用户,以下建议可能会有所帮助)

  1. 保持简单,类似于您计划的 A 部分,有一个 cookie(cake 和 wordpress 都可见),它简单地说明用户是否登录。cookie 应该由 cake 和 WP 创建/检查。Cake 不需要看 WP 的 DB。cookie 可以包含有关如何映射每个系统中的用户的信息。
  2. 有一个中央登录屏幕,这类似于 CAS 所做的。但请建立你自己的。CAS 不处理匿名用户。我目前正在为工作创建一个中央登录屏幕。这很简单。中央登录屏幕将处理所有身份验证并创建对 WP 和 cake 可见的 cookie。这意味着 WP 和 cake 的登录链接会将用户重定向到公共页面。该链接需要提供一个回调 URL,以便在用户成功验证后,将他重定向回原始服务。您将需要决定一个用于用户身份验证的中央数据库。

cookie 方法有以下好处:

  • 这是一个轻量级的解决方案,可以用开/关开关包裹。在 WP 中,只需使用 wp_options 值包装 cookie 逻辑。
  • 您可以使用 WP 和 cake 的认证系统。无需使用 API 和/或会话。无需通过查看彼此的数据库来耦合应用程序。
  • 您可以保持角色和权限原生,这意味着 WP 将使用它自己的角色和权限系统,您的蛋糕应用程序将使用它的系统。
  • 向您的平台添加新的“服务”就像“创建/检查 cookie”一样简单,然后使用系统开箱即用的身份验证系统来登录用户。
  • 单点登录就像创建 cookie 一样简单。单点注销将删除 cookie。

如果您有兴趣,我绝对可以详细介绍每个建议。

于 2013-03-15T06:26:10.953 回答