在 JWT 令牌中存储用户权限的最佳做法是什么?
what is best practice to store user permissions in JWT token?
我们的系统架构就像管理员可以在用户级别分配权限。我们使用 JWT 令牌进行授权,之前我们使用角色,并且角色被添加到服务器端的有效负载中,我们检查该角色并相应地 allow/disallow 而无需访问数据库。但是当我们在 JWT 令牌中添加权限时,它的负载太重并影响网络流量。
所以我的问题是处理 JWT 令牌中的用户基础权限的最佳做法是什么。
我不认为对此有“最佳实践”,因为将用户的权限存储在 JWT 中听起来不可取,原因如下:
由于 JWT 必须包含执行请求所需的所有信息,如果在任何给定时间用户删除了权限,只要他的 JWT 未过期,他将继续拥有这些权限一段时间。也就是说,使用您描述的方法,向用户添加或删除权限并不是立即发生的效果,因此有必要开发机制以使这些更改的效果立即生效。另外,我认为用户的权限可以归类为敏感信息,不建议将敏感信息存储在JWT中(因为任何人都可以看到)。
如果您想继续这样做,您可以为权限分配标识符(例如小数字)并将这些标识符和权限存储在服务器的 RAM 中(例如,使用字典或哈希 table) .最后,在 JWT 中,您只需存储权限的标识符,从而尽可能节省 space。这样就不用打数据库了
我们的系统架构就像管理员可以在用户级别分配权限。我们使用 JWT 令牌进行授权,之前我们使用角色,并且角色被添加到服务器端的有效负载中,我们检查该角色并相应地 allow/disallow 而无需访问数据库。但是当我们在 JWT 令牌中添加权限时,它的负载太重并影响网络流量。 所以我的问题是处理 JWT 令牌中的用户基础权限的最佳做法是什么。
我不认为对此有“最佳实践”,因为将用户的权限存储在 JWT 中听起来不可取,原因如下:
由于 JWT 必须包含执行请求所需的所有信息,如果在任何给定时间用户删除了权限,只要他的 JWT 未过期,他将继续拥有这些权限一段时间。也就是说,使用您描述的方法,向用户添加或删除权限并不是立即发生的效果,因此有必要开发机制以使这些更改的效果立即生效。另外,我认为用户的权限可以归类为敏感信息,不建议将敏感信息存储在JWT中(因为任何人都可以看到)。
如果您想继续这样做,您可以为权限分配标识符(例如小数字)并将这些标识符和权限存储在服务器的 RAM 中(例如,使用字典或哈希 table) .最后,在 JWT 中,您只需存储权限的标识符,从而尽可能节省 space。这样就不用打数据库了