在 JWT 令牌中存储用户权限的最佳做法是啥?

Posted

技术标签:

【中文标题】在 JWT 令牌中存储用户权限的最佳做法是啥?【英文标题】:what is best practice to store user permissions in JWT token?在 JWT 令牌中存储用户权限的最佳做法是什么? 【发布时间】:2021-11-28 02:40:53 【问题描述】:

我们的系统架构就像管理员可以在用户级别分配权限。我们正在使用 JWT 令牌进行授权,以前我们使用角色,并且角色被添加到服务器端的有效负载中,我们检查该角色并相应地允许/禁止而不访问数据库。但是当我们在 JWT 令牌中添加权限时,它的负载太重并且影响网络流量。 所以我的问题是处理 JWT 令牌中的用户群权限的最佳做法是什么。

【问题讨论】:

您尝试压缩 JWT 了吗? 【参考方案1】:

我认为这没有“最佳实践”,因为将用户的权限存储在 JWT 中听起来并不可取,原因如下:

由于 JWT 必须包含执行请求所需的所有信息,因此如果在任何给定时间用户的权限被删除,只要他的 JWT 尚未过期,他将继续拥有这些权限一段时间。也就是说,使用您描述的方法,向用户添加或删除权限并不是立即发生的效果,因此有必要开发机制以使这些更改的效果立即生效。另外,我认为用户的权限可以归类为敏感信息,不建议将敏感信息存储在 JWT 中(因为任何人都可以看到)。

如果您想继续这样做,您可以为权限分配标识符(例如小数字)并将这些标识符和权限存储在服务器的 RAM 中(例如,使用字典或哈希表)。最后,在 JWT 中您只需要存储权限的标识符,从而尽可能节省空间。这样就不用打数据库了。

【讨论】:

以上是关于在 JWT 令牌中存储用户权限的最佳做法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

我应该在哪里存储 JWT 令牌?

为 Flutter web 存储 JWT 令牌

在哪里存储 JWT 令牌?

为 WebSocket 连接更新令牌的最佳做法是啥

在数据库中存储和维护 JWT 刷新令牌的最佳策略?

存储JWT令牌的位置?