【问题标题】:Share authentication between two websites在两个网站之间共享身份验证
【发布时间】:2011-10-10 09:32:49
【问题描述】:

在两个站点之间共享登录的最佳/正确技术是什么。

我有网站 A,还有一些网站 B。这两种类型都属于同一家公司,但 B 在客户场所运行。我想要的是,用户在 B 中登录,当由于某种原因被重定向到 A 时,他们不需要再次登录,他们可以在 A 中使用他们的帐户。

当然,公司会为每个“B”用户登录。问题是用户可以在 A 或 B 中发起登录。

OAuth 可以吗?还是 OpenID 更合适?

另一种选择是在 GET 字符串中传递一个 GUID 令牌,其中包含一个生存时间并且仅对请求者的 IP 地址有效,但不确定用户是否会通过同一网关访问网站。

谢谢

【问题讨论】:

  • 您的用例是典型的 SSO 场景,已在本网站上的许多帖子中讨论过,但每个帖子的确切解决方案取决于多种因素:您的应用程序框架是什么,部署的架构是什么,你喜欢的语言等等……我可以给你发一篇帖子link

标签: authentication cookies oauth openid dotnetopenauth


【解决方案1】:

OAuth 正是您所需要的。 OpenID 提供发现,仅当用户选择与谁进行身份验证(而不是您的用例)时才有用。此外,OpenID 要复杂得多,而且是一个垂死的协议。

在您的场景中,服务器 A 是 OAuth 服务器(或 OAuth 2.0 中的授权服务器),服务器 B 是客户端。有很多方法可以实现这一点,但我建议您从查看(并尝试)Facebook OAuth 2.0 实现的工作原理开始。它将让您很好地了解所涉及的内容以及它们的一些扩展(例如显示),使其更加用户友好。

【讨论】:

  • “OpenID 是一个垂死的协议”。对此主张有任何支持吗?
  • @andre OpenID 3 年来没有看到任何重大采用,其背后的组织完全功能失调,其最活跃的成员(和一些创始人)不再参与。基本上,OpenID 太不可用了,以至于大多数网站选择使用 Facebook 和 Twitter(有时是谷歌)并直接连接到它们。
  • @vtortola 取决于您在寻找什么。鉴于 OpenID 存在重大的可用性问题,大多数开发人员会选择尽可能相关的身份提供者(例如 Facebook、Twitter、Google 等)并直接使用它们。一旦您不需要支持更多,OAuth 就成为一个更简单、更好的选择。
  • @Eran:OpenID 网站声称拥有over 1 billion OpenID enabled accounts。我认为这是主要的采用。此外,人们遇到的大多数问题都与同时支持所有身份提供者有关。如果您为自定义 SSO 解决方案实施自己的提供商并且只有 1 个提供商需要支持,我怀疑您会遇到同样的问题。
  • @andre 营销太多了。当然,如果您计算每个 Yahoo、AOL 和 Google 帐户(以及一些混乱的 Microsoft 和 Facebook 帐户),您可以要求这些数字。但实际上,最好直接连接到您要支持的特定提供商。一旦您不再让人们键入他们的 OpenID URI 而是单击一个按钮,与 OAuth 相比,Open ID 就会失去其价值。 OpenID 很难正确实施,更难安全实施。
【解决方案2】:

您在谈论单点登录。拥有网站 A 的公司是否在其 api 中提供远程登录?

您需要确保登录信息在传递到网站 A 时已加密。我构建的最后一次单点登录要求我传递通过 RSA 加密并使用 MD5 散列的用户 AD 名称。第三方拥有用户的 AD 名称和第三方站点密码的数据库。当用户点击一个链接时,他们的加密信息被发送到第三方的登录api,第三方将他们重定向到欢迎页面,登录过程完成。

如果您自己构建单点登录 API,例如您可以控制网站 A,那么 OAuth 是一个不错的选择。这很容易暗示。

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多