gpt4 book ai didi

cakephp - 如何允许同一服务器上的多个 cakephp 3 应用程序之间进行单点登录?

转载 作者:IT王子 更新时间:2023-10-29 06:02:27 26 4
gpt4 key购买 nike

情况

我目前在同一个 Ubuntu 服务器上有两个 cakephp 3 应用程序,使用同一个 MySQL 和不同的数据库。

让我们调用第一个应用程序Hammy(它使用数据库名称hammy)我们将第二个应用程序称为 Chewy(它使用数据库名称 chewy)

Hammy 最初是为特定客户的公司构建的,因此 hammy 中有 usersgroups 表数据库。

随后,我需要为同一个客户和另一个客户构建 Chewy

chewy 中,我设计了 usersgroups 表,但多了一个名为 account_id 的列。

这些是我用于上述设置的域:

customerA.hammy.comcustomerA.chewy.com 网站customerB.chewy.com

我想要什么

我想要的是,在 customerA.hammy.com 中的用户单击将她发送到 customerA.chewy.com 的链接后,她可以继续访问 customerA.chewy.com

无论用户是登录 customerA.hammy.com 还是 customerA.chewy.com,她都可以毫无问题地访问这两个网络应用。

基本上是单点登录。

我的选择

这些是我如何解决这个问题的想法。

  1. 我可以创建第三个网络应用程序,它基本上只是一个网络服务,主要处理 Hammy 和 Chewy 的身份验证。

我熟悉使用 CakePHP 3.x 构建网络服务

但是,我不熟悉身份验证选项。

这是我在 Hammy 和 Chewy 的 AppController 中使用的内容

$authOptions = [
'loginRedirect' => [
'controller' => 'Pages',
'action' => 'overview'
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login'
],
'authorize' => ['Controller'],
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
],
],
],
'unauthorizedRedirect' => [
'controller' => 'Users',
'action' => 'login',
],
];
$this->loadComponent('Auth', $authOptions);
  1. 使用redis

缺点是我从未尝试过 Redis,所以我什至不知道如何实现它。

我们欢迎任何建议。

谢谢。

最佳答案

CakePHP 3.x doc : Manually Logging Users In

有了这个,您可以避免“自然”的 cakephp 登录,并强制它按照您的意愿登录您的用户。

最大的问题是您在 Cakephp 子域之间没有任何共享部分。

对我来说(但那是完美的):

  • 我会在服务器上创建一个共享文件夹/数据库,
  • 在每次登录(自然或自动)时生成一个 token ,
  • 将其存储在共享部分和用户 cookie 中,

并且在更改 Dom 时,检查 cookie 是否存在,如果存在,请检查它是否合法,如果是,则生成一个新 token 并删除旧 token 并在新 Dom 上自动登录我的用户。

有了这个,您可以将数据链接到共享部分中的配置文件(文件或数据库字段中的序列化数组)...

小心使用 token 作为密码的安全风险:

  • 一次仅用于 token ,
  • 删除旧 token ,
  • 尝试阅读一些有关在客户端保持 token 安全的内容

顺便说一句,这可能是个愚蠢的想法,但如果您在同一台服务器上运行相同的 cakephp 版本,为什么不使用符号链接(symbolic link)为每个 cakephp session 创建一个共享文件夹?

关于cakephp - 如何允许同一服务器上的多个 cakephp 3 应用程序之间进行单点登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33684966/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com