如何为多个域设置单点登录?

信息安全 验证 验证 sso
2021-08-29 12:47:11

我为我们位于同一域中的两个站点设置了单点登录:a.domain.com 和 b.domain.com

我是通过 cookie 完成的,但它们是依赖于域的。而且 - 正如这本书中所写 - 现在对不同域的单点登录的需求已经引起了它的丑陋:) 我 99% 确信我可以忘记使用 OpenId(他们不喜欢外部服务在这里,我什至无法让他们接受reCaptcha

我希望能够识别不同网站(a.domain.com、b.anotherdomain.com 等)上的某人。在多个域上设置/管理单点登录的推荐方法是什么?在起草提案之前,我应该注意哪些具体的安全问题?

4个回答

Stack Exchange Network实现单点登录的方式非常有趣。它利用HTML 5 Local Storage根据您需要的浏览器支持,您也许可以使用类似的方法。

您可以查看 stackoverflow 博客文章Global Network Auto Login了解更多详细信息。

您不必为 OpenId 使用外部服务。您可以在内部托管 OpenId 服务器并将其用于您的 SSO。这将允许您利用开源代码以及为确保 OpenId 安全所做的所有工作。

PS:OpenId 可用于拥有许多站点使用的唯一身份,但您仍然必须“手动”登录每个域。

两个很好的协议是 OAuth (http://en.wikipedia.org/wiki/OAuth) 和 SAML。您可以使用 OpenID 或其他身份验证方法运行您自己的“身份提供者”站点。

这里有很多很好的答案。
这些是一些很好的解决方案:

  • 开放标识
  • 身份验证
  • SAML
  • ADFS
  • 本地存储

尽管我不认为这些中的任何一个实现起来都不是微不足道的,但没有更多地了解它们。

更好的是实施一个适当的 web-SSO 产品——尽管从你的问题看来这不是一个选择(尽管我会敦促你重新考虑,并试图说服你的上级)。

我见过的一个非常简单的解决方案,实际上一些 web-SSO 产品也使用这个技巧(请注意,我不一定在所有情况下都推荐这种方法,见下文):
拥有第三个“身份验证”域发出一个“身份cookie”(在验证用户身份之后)。其他域上的网站可以向身份验证域提交一个简单的 POST 请求,其中当然包括该的用户 cookie 。返回的响应基本上会告诉原始域,用户是否经过身份验证,以及如果需要他的身份是什么。
如果用户尚未通过身份验证 - 他将被重定向到身份验证域上的页面以提交他的密码等。

虽然设置起来非常简单,但请注意,要使其真正安全存在一些挑战。
例如,按照定义,任何网站都可以检索您的身份。此外,可以通过修改返回的响应来“欺骗”依赖网站。
当然,解决这些问题最直接的方法是——你猜对了——SAML/OpenId/etc。