在PHP中实现三个网站的单一登录


Implementing a single login for three websites in PHP?

我有三个相关网站的网络。

 - site1.domain.com
 - site2.domain.com
 - site3.domain.com

目前,每个子域在三个独立的数据库中有~100个帐户。他们分别登录每个域。我想创建site0.domain.com,让他们对一个数据库进行身份验证,然后当用户访问它们时自动登录到每个站点。

我不太确定该怎么做。我听说过诸如Open ID、Federations和Single Sign On之类的术语,但我以前从未想过这样整合网站。

有什么建议吗?首先,这在技术上是如何完成的(我使用PHP/MySQL);其次,在不中断服务的情况下,将现有用户帐户迁移到使用单点登录的好计划是什么?

我猜用户可以通过site0上的表单登录,它将根据数据库对用户进行认证,并为他们的会话创建一个数据库行,并附带一个令牌。令牌设置在会话变量cookie中。用户访问site1、site2或site3,如果在GET请求中设置了令牌变量,它将连接到site0使用的相同数据库,搜索令牌,并返回正确的用户行。就是这么回事吗?如果能提供更多的技术建议就太好了……

至于迁移,我想我可以让用户创建他们的site0登录或"连接"他们的用户帐户到site0登录,如果他们还没有每次登录到一个网站。30天后,所有的网站停止接受正常的登录,用户被强制创建一个site0登录。当他们创建一个site0登录时,它会询问他们的site1,site2或site3的用户名/密码,以便它可以获得正确的用户信息。

看看像SimpleSAMLphp这样的库,它是做这类事情的一个很好的库。