首页 > 解决方案 > 从单独的服务器创建登录身份

问题描述

的背景

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

问题

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

一旦他们登录门户,他们将看到该客户“拥有”的网站列表。

然后我会显示一个“登录”按钮,因此一旦他们单击该按钮,它就会将他们验证到远程站点并将他们重定向到它。(雅雅单登录)。

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

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

我考虑了2个选项

选项1

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

选项 2

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

如果有人有任何想法,只要它确实损害安全性,越简单越好,或者建议将是最有帮助的

标签: phpauthenticationsingle-sign-on

解决方案


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

  1. 使用 PHP curl 将数据发送到目标站点
  2. 数据应该包含用户的登录名,加上一个“秘密字符串”,以便目标服务器知道流量来自您的主站点,然后 curl 可以简单地返回用户的登录凭据(用户名和密码) )
  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);

推荐阅读