【问题标题】:Is it recommended to store changing data in JWT是否建议将更改的数据存储在 JWT 中
【发布时间】:2020-10-25 05:15:42
【问题描述】:

据我所知,JWT 的主要用途是我们可以将用户相关数据存储在 JWT 令牌本身中,并在资源服务器进行令牌验证期间节省不必要的 DB 命中。问题是如果我将数据存储在 JWT 中随着时间的推移而变化,例如角色或用户菜单列表或用户状态,它如何处理这些变化。

考虑这种情况。

  1. 具有 admin 角色的用户已登录 Web 应用程序,在登录时用户状态为 ACTIVE,用户角色为 admin。 authserver 使用这些信息生成 JWT 令牌。
  2. 访问令牌有效期设置为 15 分钟,刷新令牌有效期设置为 8 小时。
  3. 另一方面,另一个具有“Superadmin”角色的用户挂起“Admin”用户或将“Admin”用户角色更改为“Supervisor”。现在由于“管理员”已经有一个未过期的访问令牌或刷新令牌,我是否应该在每次验证令牌时进行另一个数据库检查,或者我不应该将用户状态和角色存储在 JWT 令牌本身中?李>

【问题讨论】:

    标签: oauth-2.0 jwt jwt-auth spring-oauth2


    【解决方案1】:

    不建议将此类数据存储在 jwt 中。在您的场景中,最好仅将用户 ID 与 jwt 附加并检查每个服务器命中的用户状态。如果您在客户端编写任何逻辑来解码令牌,则会危及令牌的安全性。

    【讨论】:

    • 目前我只在 jwt 令牌中附加用户 ID,但我觉得它违背了它的目的,因为 JWT 应该保存大量信息,而 JSESSION ID 只保存会话 ID
    • tools.ietf.org/html/rfc7519 jwt.io/introduction 参考这些链接以获取更多信息......以及你的问题......正如 rfc 所说,jwt 是一种在各方之间转移索赔的手段......说一个客户和服务器。因此,根据 rfc,您可以在令牌的有效负载中包含任何内容,但由于用例需要处理动态数据,建议访问服务器以更新用户对象的更改。
    猜你喜欢
    • 2012-12-06
    • 2017-09-15
    • 2011-01-22
    • 2021-09-26
    • 2016-02-16
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多