是否建议将更改的数据存储在 JWT 中
Posted
技术标签:
【中文标题】是否建议将更改的数据存储在 JWT 中【英文标题】:Is it recommended to store changing data in JWT 【发布时间】:2020-10-25 05:15:42 【问题描述】:据我所知,JWT 的主要用途是我们可以将用户相关数据存储在 JWT 令牌本身中,并在资源服务器进行令牌验证期间节省不必要的 DB 命中。问题是如果我将数据存储在 JWT 中随着时间的推移而变化,例如角色或用户菜单列表或用户状态,它如何处理这些变化。
考虑这种情况。
-
具有 admin 角色的用户已登录 Web 应用程序,在登录时用户状态为 ACTIVE,用户角色为 admin。 authserver 使用这些信息生成 JWT 令牌。
访问令牌有效期设置为 15 分钟,刷新令牌有效期设置为 8 小时。
另一方面,另一个具有“Superadmin”角色的用户挂起“Admin”用户或将“Admin”用户角色更改为“Supervisor”。现在由于“管理员”已经有一个未过期的访问令牌或刷新令牌,我是否应该在每次验证令牌时进行另一个数据库检查,或者我不应该将用户状态和角色存储在 JWT 令牌本身中?李>
【问题讨论】:
【参考方案1】:不建议将此类数据存储在 jwt 中。在您的场景中,最好仅将用户 ID 与 jwt 附加并检查每个服务器命中的用户状态。如果您在客户端编写任何逻辑来解码令牌,则会危及令牌的安全性。
【讨论】:
目前我只在 jwt 令牌中附加用户 ID,但我觉得它违背了它的目的,因为 JWT 应该保存大量信息,而 JSESSION ID 只保存会话 ID tools.ietf.org/html/rfc7519 jwt.io/introduction 参考这些链接以获取更多信息......以及你的问题......正如 rfc 所说,jwt 是一种在各方之间转移索赔的手段......说一个客户和服务器。因此,根据 rfc,您可以在令牌的有效负载中包含任何内容,但由于用例需要处理动态数据,建议访问服务器以更新用户对象的更改。以上是关于是否建议将更改的数据存储在 JWT 中的主要内容,如果未能解决你的问题,请参考以下文章