跨多个网站的透明单点登录

4
我有一个站点网络,其中一些是子域名,其他的是域名。我想要为所有用户创建一个中心登录位置,例如http://login.example.com/,他们可以在此处登录。我在所有站点上都有一个登录链接,用户可以单击该链接以登录。如果他们登录一次,则应透明地登录到所有其他站点。如果他们在一个站点注销,我也希望将其注销整个网络,而不是将其发送回http://login.example.com/当他们转到网络中的另一个站点时。 这是否可行?oAuth或OpenId能否帮助我实现这一目标?如何在Python中使用Django实现这样的解决方案?是否可能在不使用SSL的情况下安全地实现这一点?
2个回答

2
这里有一个例子可以说明这个过程是如何工作的。当维基百科(en.wikipedia.org)编辑者登录时,图像会从维基百科的姐妹站点(如en.wiktionary.org、en.wikinews.org等)加载。这些图片的URL包含查询字符串作为令牌,证明用户已登录,服务器可以在需要的所有主域上设置cookie(类似于广告网络的用户跟踪)。如果您想看到它的实际操作,请在维基百科上创建一个帐户。提示:维基百科有许多不同的语言站点,但它只需要为自己设置一个cookie,因为所有不同的语言站点都是相同域名(wikipedia.org)下的子域名。

好的。这种方法有什么缺点吗? - User
我感到担忧,因为https://dev59.com/pHNA5IYBdhLWcg3wPLL-#1057199显示了一个相当大的解决方案。 - User
其中一个问题是Safari浏览器默认启用保守的Cookie策略。在该浏览器中,用户可能需要单独登录每个站点(尽管可以使用相同的用户名/密码)。 - PleaseStand

1
当用户成功登录时,在他看到的下一页上放置自动发送表单,以便在所有其他针对iframe的站点上登录他。 或者,如果会话ID在所有域上都有效,则在他看到的下一页上放置指向URL(如“domain5.example.org/setcookie?cookie=65277af767fea”)的图像,该URL返回Set-Cookie标头。

1
你能否详细解释一下这个问题? - User
我很担心,因为https://dev59.com/pHNA5IYBdhLWcg3wPLL-#1057199显示了一个相当庞大的解决方案。 - User
@Shubh:那是另一种方式,但我认为你不必那么复杂地做。 - thejh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接