session - 使用 oAuth2 或共享 session 单点登录

标签 session oauth oauth-2.0 openid single-sign-on

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

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

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

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

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

最佳答案

我会采取有差异的 oauth 路线。

  1. 认证:

我更喜欢的方法是 - 在设备级别(用户应用程序/设备)颁发访问 token 。 即,将有一个注册您的设备并授予其访问权限的过程。 这将导致生成特定于设备的访问 token 并根据情况存储在其中。 (例如:- 对于移动设备,您可能需要较长有效期的访问 token ,而网页则需要较短期限的访问 token )。 这样您就可以解耦跨设备的登录/注销。

但是这种方法的缺点是:

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

优点:

  • 这是一种相当标准的方式
  • 可以解决问题 2(添加访问 token 属性等)。
<小时/>
  • 基于 session 的 SSO 管理
  • 优点:

    • 比 OAuth 简单

    缺点:

    • 有关 session /cookie 处理的安全限制
    • 以后添加更多用例的可扩展性有限

    关于session - 使用 oAuth2 或共享 session 单点登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19372551/

    相关文章:

    node.js - Node js,使用 connect-memcached 时没有返回响应

    wcf - WCF 服务中的 IncomingWebRequestContext.UriTemplateMatch null

    android - 从 Chrome 自定义选项卡重定向到 Android 应用时出现 "Navigation is blocked"

    authentication - 使用 oauth2 的静默身份验证(提示=无)

    java - 在 Spring Boot 2 中验证 Oauth2 JWT token

    java - spring添加redis-session-sharing功能后对象引用不同的内存地址

    php - 显示最近从 $_FILES 上传的文件

    python - 如何在 Django 模板中使用后删除 session 变量

    java - 如何使用java在android中打开自定义方案

    oauth-2.0 - 是否有通过 Kubernetes 集群提供 OAUTH2 安全性的最佳实践标准?