4

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

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

  • 如果在一个系统上登录,您将在所有系统上登录(显然)。
  • 如果退出一个系统,您将退出所有系统。甚至跨子域。
  • 如果您在两台不同的机器上登录,例如手机和台式机。在手机上注销时,请勿在桌面上注销。

我们已经编写了 oAuth 提供程序,我们将把它用于不与我们的域(API 等)耦合的项目,但我并不完全相信 oAuth 是满足上述要求的最佳解决方案。我想也许共享会话会更好。共享会话的想法将涉及存储在主域上的 cookie,该 cookie 包含有关当前登录用户的信息。

两种方法的优缺点是什么?您还有其他方法可以采取吗?是否存在需要考虑的安全风险?并发性和可扩展性的考虑?请帮忙!

4

1 回答 1

0

我会采取不同的oauth路线。

  1. 认证

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

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

  1. 更复杂的实现,因为它涉及设备注册
  2. 跟踪每个用户的操作将很困难,因为您有两个或多个与用户绑定的访问令牌。

优点:

  • 这是一种相当标准的方式
  • Con 2 可以解决(添加访问令牌属性等)。

  1. 基于会话的 SSO 管理

优点:

  • 比 OAuth 更简单

缺点:

  • 围绕 -session/cookie 处理的安全限制
  • 稍后添加更多用例的可扩展性受到限制
于 2014-03-06T11:08:23.533 回答