人们通常将权限存储在 JWT 中吗?我见过可能有admin: true
or的例子scopes: ['add_foo', 'delete_foo', 'read_foo']
。这似乎很好,除了如果有很多权限/范围,JWT 可能会变得很大。看起来它真的很有用,因为只要可以验证 JWT,您就不需要访问数据库或缓存来获取用户权限。
不过,我的主要问题是,如果发生权限更改,这些将如何失效。
例如,系统管理员 Joe 撤销了用户 Bob 的“add_foo”和“delete_foo”权限,但保留了“read_foo”权限。在这种情况下,用户 Bob 不应该让他的令牌完全失效并需要重新登录,他基本上应该被迫获得一个具有新权限的新 JWT 并照常继续。
我看过一些解释在密码更改时发布新 JWT 的示例,但这里的不同之处在于系统管理员 Joe 对用户 Bob 进行了更新。因此,用户 Bob 在此工作流程中没有机会立即获得新令牌。
大多数示例建议维护已撤销令牌的黑名单,或更改数据库记录 ID 以使令牌不再有效,或拥有每个用户的秘密并更改它。
我看到所有这些都可以用于撤销令牌并测试其无效,但是用户如何获得新令牌?他们当前的 JWT 现在无效了吗?试图用它做任何事情都应该失败。
我见过提到“刷新令牌”。这些用途广泛吗?它们在网络上是安全的还是主要用于难以获得刷新令牌的移动应用程序。通过浏览器开发工具或类似工具窃取刷新令牌似乎相当容易,然后有人将永远访问该帐户,直到发现未经授权的访问并撤销刷新令牌。
也许在这种情况下,强制用户 Bob 重新进行身份验证并不是什么大不了的事?权限可能不会经常更改。
谢谢,迈克。