jwt 访问令牌和刷新令牌流

时间:2021-06-06 05:21:48

标签: node.js express authentication jwt

这是我的身份验证流程:

  1. 用户登录后收到两个令牌(有过期时间的访问令牌和没有过期时间的刷新令牌)
  2. 对于每个用户,刷新令牌存储在数据库中名为 refreshTokens(这是一个数组)的 json 列中。
  3. 在客户端,访问令牌和刷新令牌都存储在本地存储中。
  4. 当需要验证用户时,如果访问令牌已过期,则会使用刷新令牌创建一个新的访问令牌并将其发送回用户并使用户保持登录状态。
  5. 当用户注销时,存储在数据库中的刷新令牌(在 refreshTokens 列表中)将被删除。

我的问题是:

  1. 这个流程安全吗?
  2. 我需要在 cookie 上保存刷新令牌还是本地存储足够好?

2 个答案:

答案 0 :(得分:1)

该流程取决于 OAuth 的工作方式以及如何以安全的方式存储令牌,因此对这两个问题都回答“是”。缺少的部分是首先如何获取令牌:因为使用 PCKE 的授权代码授权类型是首选方式,而不是传统的隐式授权类型。

答案 1 :(得分:1)

此流程受到保护的一个重要部分是,在第 4 点中,您使用保存在数据库中的刷新令牌列表来验证 RT 未被撤销。除此之外它看起来还可以。您可以通过添加过期时间来刷新令牌来增加安全性。然后,即使用户没有主动退出(您没有从 DB 中清除 RTs),RT 在一段时间后也将无法使用。

在我看来,将令牌保存在本地存储中已经足够了。