在 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 令牌中存储用户权限的最佳做法是啥?的主要内容,如果未能解决你的问题,请参考以下文章