node.js - jwt 访问令牌和刷新令牌流
问题描述
这是我的身份验证流程:
- 用户登录后收到两个令牌(有过期时间的访问令牌和没有过期时间的刷新令牌)
- 对于每个用户,刷新令牌存储在数据库中名为 refreshTokens(它是一个数组)的 json 列中。
- 在客户端,访问令牌和刷新令牌都存储在本地存储中。
- 当需要验证用户时,如果访问令牌过期,则使用刷新令牌创建一个新的访问令牌并发回给用户并保持用户登录。
- 当用户注销时,存储在数据库中的刷新令牌(在 refreshTokens 列表中)被删除。
我的问题是:
- 这个流程安全吗?
- 我需要在 cookie 上保存刷新令牌还是本地存储足够好?
解决方案
此流程得到保护的一个重要部分是,在第 4 点中,您使用数据库中保存的刷新令牌列表来验证 RT 未被撤销。除此之外它看起来还可以。您可以通过添加过期时间来刷新令牌来增加安全性。然后,即使用户没有主动注销(您没有从 DB 中清除 RT),一段时间后 RT 也将无法使用。
在我看来,将令牌保存在本地存储中就足够了。
推荐阅读
- python - 如何在.csv文件中仅重写一帧(行[2])?
- python - 颜色间距接近零的颜色条(几乎像反对数缩放)
- python - 出现错误时停止压缩文件
- javascript - 使用NodeJS查询数据库时如何处理超时?
- php - imagestring 不能写入条形码字符串
- vba - 使用 VBS [Visio] 在锁定图层上编辑形状
- sql-server - SQL Server:COMMIT 上的事务可以死锁吗?
- azure-devops - 禁用匿名身份验证的 Azure Devops 本地服务器上的适当代理设置是什么?
- python - future=True 在 sqlalchemy 的 create_engine() 函数中究竟做了什么?
- android - 防止在 webview 中暴露本地文件的 URI