Session 使用oAuth2或共享会话进行单点登录

Session 使用oAuth2或共享会话进行单点登录,session,oauth,oauth-2.0,openid,single-sign-on,Session,Oauth,Oauth 2.0,Openid,Single Sign On,我有三个面向客户端的web应用程序,它们都位于不同的子域上(其中一个web应用程序实际上有700多个子域,这些子域一直在变化)。我已经编写了一个oAuth服务器,我将使用它允许用户登录到这些系统中的每一个;这是可行的,但我已经开始发现,在编写注销代码时,正在发生的事情与我希望的行为之间存在差异 我对单点登录的一些要求是: 如果登录到一个系统,那么您将登录到所有系统(显然) 如果从一个系统注销,则您将从所有系统注销。甚至跨子域 例如,如果你在两台不同的机器上登录——一台手机和一台台式机。在手机上

我有三个面向客户端的web应用程序,它们都位于不同的子域上(其中一个web应用程序实际上有700多个子域,这些子域一直在变化)。我已经编写了一个oAuth服务器,我将使用它允许用户登录到这些系统中的每一个;这是可行的,但我已经开始发现,在编写注销代码时,正在发生的事情与我希望的行为之间存在差异

我对单点登录的一些要求是:

  • 如果登录到一个系统,那么您将登录到所有系统(显然)
  • 如果从一个系统注销,则您将从所有系统注销。甚至跨子域
  • 例如,如果你在两台不同的机器上登录——一台手机和一台台式机。在手机上注销时,不要在桌面上注销
我们已经编写了oAuth提供程序,我们将把它用于不与我们的领域(API等)耦合的项目,但我并不完全相信oAuth是满足上述要求的最佳解决方案。我在想也许一个共享的会议会更好。共享会话的想法将涉及一个存储在主域上的cookie,其中包含有关当前登录用户的信息


这两种方法的优缺点是什么?你还有其他的方法吗?有没有考虑安全风险?并发性和可伸缩性考虑因素?请帮忙

我会选择有差异的oauth路线

  • Oauth
  • 我更喜欢的方法是在设备级别(用户-应用程序/设备)发布访问令牌。 Ie将有一个注册您的设备并授予访问权限的过程。 这将导致生成特定于该设备并存储在其中(视情况而定)的访问令牌。(例如:-对于手机,您可能需要更长的到期访问令牌,而网页需要更短的持续时间)。 通过这种方式,您可以在不同的设备之间分离登录/注销

    然而,这种方法的缺点是:

  • 更复杂的实现,因为它涉及设备注册
  • 跟踪每个用户的操作将很困难,因为您有两个或多个访问令牌绑定到一个用户 优点:

    • 这是一个相当标准的方法
    • CON2可以解决(添加访问令牌属性等)

  • 基于会话的SSO管理
  • 优点:

    • 比OAuth更简单
    缺点:

    • 关于会话/cookie处理的安全约束
    • 后期添加更多用例的可扩展性是有限的