在 SPA 中使用 OAuth2 记住我

Remember me with OAuth2 in SPA

我知道 OAuth2 和 OpenID 的概念。在我们的应用程序中,身份验证是通过 OKTA 进行的,我们会在响应中收到访问令牌。 我们的架构是微服务架构,我们在前端使用 EmberJS
我们必须实现 remember-me 功能,它将让用户在接下来的 30 天内保持登录状态。 我做了一些研究,得出了满足我要求的点。

  1. 在 OKTA 中保持用户会话活跃 30 天。
  2. 根据到期时间定期刷新访问令牌。

如果浏览器关闭,刷新将如何工作? 假设用户登录并关闭浏览器,然后在 3 天后重新打开它。

根据 OAuth 2.0 最佳实践,建议使用短期访问令牌。有一个专门的 RFC 定义这样的最佳实践,由 RFC6819 - OAuth 2.0 Threat Model and Security Considerations. There are several sections which emphasise on using short lived access tokens .For example here 标识,你可以看到为什么推荐它。

从这个角度来看,您可以使用浏览器 cookie 来处理这种情况。 Cookie 是帮助浏览器和服务器保持状态的机制。在典型的 Web 应用程序中,可以通过 cookie 来维护登录状态。 Cookie 有两种变体。

  1. 会话 cookie
  2. 持久化 cookie

第二种cookie类型,当浏览器关闭时持久化的cookies不会离开浏览器。当然,用户可以通过清除 cookie 来删除它们。在您的场景中,您可以将此类 cookie 设置为具有所需生命周期的用户。在后端,您需要将 cookie 值映射到一个状态,该状态应在后端收到有效的访问令牌/ID 令牌时开始(在身份验证和授权步骤之后)。

关于cookies的安全,有很多事情是你必须要注意的。但最重要的是将 cookie 设置为 secureHttpOnly.

此外,您可以在与 cookie 相关的后端存储对刷新令牌的引用。然后,对于每次新使用,如果您需要 API 使用访问令牌进行访问,则可以使用刷新令牌来获取访问令牌。