首页 > 解决方案 > jwt 访问令牌和刷新令牌流

问题描述

这是我的身份验证流程:

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

我的问题是:

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

标签: node.jsexpressauthenticationjwt

解决方案


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

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


推荐阅读