编写一个PHP单点登录类似于godaddy


Coding a PHP Single Sign On Similar to godaddy

当你登录到Godaddy时,他们已经实现了一个单点登录系统,可以登录到他们网站的多个子域。url改变了,当它改变时,它会把你登录到每一个,然后返回到你正在登录的原始url。

话虽如此……

1)我假设他们在提交表单时通过POST传递变量,然后通过POST将表单数据重新提交到另一个域,然后再一次,再一次……等等……这是正确的吗?

2)它们在一个顶级域内传递它们。是否有可能将这些变量(就像它们一样)一起传递到一个新域。示例:登录到domain1.com,然后它改变为domains2.com并记录你在那里,然后domain3.com,等等(在预定义的列表中)

3)是否有比他们的做法更适合我的项目(如下所列)的更好的选择?

我的项目:

我正在做一个有几个域的项目,将来会扩展到包括更多的域。我试图想出一个方法,当用户登录到一个,它会以某种方式登录到所有的。这将允许用户能够去网站之间,并保持登录,而不必重新登录到每个域。它都使用1个用户数据库,然后每个网站都有自己的数据库。现在,域名都在一台服务器上;然而,最终,每个域都将拥有自己的服务器。

我这样做是作为一种学习经验,因为我一直对SSO很感兴趣,并且如果我能设法使它有效地工作,我就会试图让它在生产环境中工作。

一个选择是你可以在两个域中放置一个可以从另一个域中拉出的web元素。然后,您可以使用该URL通知另一个域,用户在第一个域中。这样就可以允许域B将该用户ID与其系统上的用户关联起来。有点难以解释,但我希望你们明白;你实际上想如何编码背后的逻辑将取决于你,因为有很多方法可以做到这一点。

请务必注意,如果您正在使用这种方法(或任何其他方法),您应该首先了解如果您不使用适当的加密和身份验证等所存在的固有风险。我建议你做一些研究,以防止攻击,如"中间人"或"重放"。既然您拥有这两个域,那么为这两个域设置安全密钥应该没有问题。

你也可以看看这个网站,它有一个跨多个域共享相同的cookie的介绍:http://www.15seconds.com/issue/971108.htm