jwt 令牌如何确保在数据库更改时更新有效负载

leo*_*277 5 node.js jwt reactjs express-jwt

我有一个关于 JWT 令牌类型身份验证概念的问题。所以假设我在用户登录后签署了一个 jwt 令牌,令牌负载包含用户名和 userRole。然后我将令牌返回给用户并存储在用户的 localStorage 中。

现在,如果我更改数据库中的用户角色,即从 normalUser 更改为 AdminUser,我如何确保用户的 localStorage 上的有效负载也发生更改?

我有一个问题,如果用户是管理员用户,当他登录时,jwt 存储在他的 localStorage 中。之后,我将他的角色设置为普通用户,他仍然可以访问管理功能,因为他的 localStorage 包含角色 AminUser。

有人可以建议一种正确的方式来实现授权,以便在用户端更新令牌吗?谢谢。

cor*_*vus 1

更改用户授权的触发因素是什么?如果您说您正在打开数据库客户端(例如 MySQL 或 PostgreSQL)并手动更改用户的授权,那么您的服务器或客户端将无法知道该更改(据我所知至少)并且他们无法对特定的变化做出反应。

如果您的触发器是用户发送的某些请求,例如logoutchange authorization,那么您应该使用该特定请求的新令牌进行响应并存储它,这很简单。

如果您的触发器与您的客户端无关,并且它以某种方式发生在您的服务器端,那么您应该在服务器和客户端之间打开一个套接字,并将该更改从服务器发送到客户端。

这样您就可以确保客户端始终是最新的。

但这仍然不够,因为是的,您要让客户端保持最新状态,但是如果他保存令牌并在您更新后替换它怎么办?即使您告诉他们他们只是普通用户,他/她仍然可以访问管理功能。为此,您需要验证任何用户所做的每个请求,并首先检查他们是否被允许发出该请求。