如何确保网站被其他网站调用时,正确的用户登录?


How can I ensure the right user is logged in when a website is called by a website

对标题的奇怪递归措辞表示抱歉,但我想不出更好的标题了。正如我之前提到的,我有两个网站A和B,我正在将B整合到A中,这样B仍然可以作为一个独立的网站访问,但也可以作为A的一部分(在iframe中)。两个网站都有自己的登录屏幕。当从a访问站点B时,我需要绕过登录屏幕。我完成了如下操作:

首先A检查B的位置是否与A相同(即它们在服务器上运行),如果这是真的,那么登录信息存储在会话变量中并在B上检查。

如果B的位置是不同的服务器,那么登录信息通过url发送(见这里:我需要集成两个站点,什么是最好的方式来传递登录信息?)考虑到url可以在源代码中看到,这可能不安全,但我想不出更好的解决方案。

当网站B被调用时,index.php被调用,index.php检查用户是否登录(是否设置会话变量),如果没有用户被授权,index.php调用check.php检查站点a发送的认证数据。如果数据是a-ok, check.php对用户进行认证,一旦脚本结束,我们回到index.php。

现在,唯一的问题是,如果用户ADMIN登录到网站a,然后点击网站b的链接,网站b显示,他现在以ADMIN身份登录两个网站。在做了一些事情之后,ADMIN退出了站点A,而没有退出站点b。然后,他的老板SUPER ADMIN走了过来,把ADMIN从他的座位上推开,登录到站点A。SUPER ADMIN然后点击到站点b的链接,才发现他以ADMIN的身份登录到站点b。在这一点上,他拿起电话,打给我,并继续对我大喊脏话。

所以,这不是最严重的问题,但它会很好地解决。我想到的一个解决方案是添加一个网站b id字段到网站a的每个用户,并在url发送此为好。因此,当调用check.php时,它将id字段存储在一个SESSION变量中。因此,当网站a再次调用index.php时,它检查Session变量是否已设置,如果已设置,则将设置的变量与$_GET发送的新变量进行比较。如果URL不同,它会破坏会话,并包括check .php,我可能会实现这个解决方案,但它需要一些工作,我不确定这是否是一个好主意,所以我想问是否有另一种更好的方法,或提示上述解决方案。

谢谢你的时间,有一个美好的一天!

使服务器相互通信。当用户想通过站点a访问站点B时,请先将其发送到服务器a。服务器A在使用新创建的登录令牌将用户重定向到站点B之前,直接与服务器B协商某种登录令牌。服务器到服务器的通信不那么容易被截获,所以你可以以纯文本形式发送用户信息,但如果你觉得有必要,你也可以加密这种通信。

当SUPER ADMIN到达时,他将获得一个新的登录令牌,告诉服务器B终止活动会话,并登录新用户。

它不是超级安全,但它非常简单,应该足够好地用于这种情况…