【问题标题】:How to implement SSO between 2 web apps on the same domain如何在同一域上的 2 个 Web 应用程序之间实现 SSO
【发布时间】:2015-09-02 08:28:58
【问题描述】:

我有两个完全独立的网络应用:

www.example.com (node.js)

www.example.com/shop (java)

用户登录 www.example.com,当他们访问 /shop 时,我希望该网络应用能够识别用户而无需再次登录。

我有一个 OAuth2 公共 api,并且正在使用 cookie 来管理网络应用程序中的用户会话。我正在尝试找出在这两个网络应用之间实现 SSO 的最佳方式。

/shop 网络应用可以读取 cookie,但无权访问实际的会话存储。 /shop 应用程序无论如何都需要进行 api 调用,所以如果我可以使用 OAuth2 来实现 SSO,那似乎是理想的选择。

有什么建议吗?

【问题讨论】:

    标签: oauth-2.0 single-sign-on session-cookies


    【解决方案1】:

    两者是正交的。 SSO 只是凭证共享。

    由于您已经拥有 cookie,因此它们在它们之间共享,并且可以让它们进入两个应用程序。只需在 cookie 中编码您想要在他们之间共享的有趣信息(特别是用户 ID,可能还有任何相关角色)。

    理想情况下,您会使用共享 cookie 进行身份验证,然后当您的 /shop 网络应用程序启动其 OWN 会话(即共享 cookie 与您的会话 cookie 不同)时,您会建立一个内部安全上下文某种。从表面上看,您将从 cookie 中提取用户 ID,然后在您的公共用户存储中查找它以获取适当的信息。

    这适用于 99% 的用例。

    因此,当用户点击您的 /shop 应用时,您的工作流程将是。

    • 检查共享 cookie
    • 如果不存在,将其重定向到主应用登录
    • 如果确实存在,请检查您是否启动了此实例的有效会话
    • 如果没有,则启动会话,并根据 cookie 中的 ID(用户名、角色、首选项)查找用户信息。这些您可以存储在会话中
    • 去购物

    注销只是破坏共享的 cookie。

    • 检查共享 cookie。
    • 如果没有共享 cookie,请检查会话
    • 如果会话存在,则销毁它

    哦,别忘了在他们登录后签署您的共享 cookie。

    没有理由让 OAuth 参与其中。方式过于复杂了。

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 1970-01-01
      • 2012-08-13
      • 2018-01-22
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2013-05-01
      • 2017-01-11
      相关资源
      最近更新 更多