从单独的服务器创建登录名

Creating a Login-in-as from a seperate server

背景

我有一个 Laravel 系统,带有标准登录系统、哈希、用户名等。 我也有多个服务器。作为 Web 开发人员的我自己的服务器,以及托管客户端站点的客户端服务器。有些客户有多个站点。

Thr 问题

我有一个场景,我希望拥有客户可以登录的主网站(开发者网站)。

他们登录门户后,将看到该客户 'owned' 的网站列表。

然后我会显示一个 'Login' 按钮,所以一旦他们单击该按钮,它就会对他们进行身份验证以进入远程站点并将他们重定向到该站点。 (ya ya 单机登录).

一般来说,这一切都是可能的,也很容易,尤其是当站点位于同一台服务器上时,我可以访问两个数据库。

但是在这个新场景中,主站点位于单独的服务器上。

我考虑了 2 个选项

选项 1

在主站点的浏览器中设置一个 cookie,其中包含客户端站点将读取的某些信息。 然后将他们重定向到辅助站点,该站点将检查该 cookie 然后进行身份验证。

选项 2

用户登录到主站点,选择 'login',它向辅助站点发送带有 api 信息的 curl 请求,然后辅助站点将以某种方式进行身份验证。

如果大家有什么想法,越简单越好,只要它不危及安全,或者建议是最有帮助的

你在选项 2 中的方向更好。你可以考虑这个

  1. 使用 PHP curl 将数据发送到目标站点
  2. 数据应包含用户的登录名,加上一个“秘密字符串”,以便目标服务器知道流量来自您的主站点,然后 curl 可以简单地 return 登录用户凭据(用户名和密码)
  3. 之后系统可以使用用户名和密码为该特定用户登录目标站点。

[可选] 如果您在目标站点上启用了 SSL,那会更好,因为您可以在 curl 中启用 SSL 以避免“中间人”攻击。在那种情况下,请使用这样的东西:

// Turn on SSL certificate verfication
curl_setopt($curl, CURLOPT_CAPATH, "/usr/local/www/vhosts/<yourdomainname>/httpdocs/cacert.pem");
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);