Node.js jwt令牌如何确保在数据库更改时更新有效负载
我有一个关于JWT令牌类型身份验证的概念的问题。 因此,假设我在用户登录后签署一个jwt令牌,该令牌负载包含用户名和用户角色。然后我将令牌返回给用户并存储在用户的本地存储中 现在,如果我在数据库中更改userrole,即从normalUser更改为AdminUser,那么如何确保用户的本地存储上的负载也会更改 我有一个问题,如果用户是管理员用户,当他登录时,jwt存储在他的本地存储中。之后,我将他的角色设置为普通用户,他仍然可以访问管理功能,因为他的本地存储包含AminUser角色 有人能建议一种正确的方法来实现授权,以便在用户端更新令牌吗?Node.js jwt令牌如何确保在数据库更改时更新有效负载,node.js,reactjs,jwt,express-jwt,Node.js,Reactjs,Jwt,Express Jwt,我有一个关于JWT令牌类型身份验证的概念的问题。 因此,假设我在用户登录后签署一个jwt令牌,该令牌负载包含用户名和用户角色。然后我将令牌返回给用户并存储在用户的本地存储中 现在,如果我在数据库中更改userrole,即从normalUser更改为AdminUser,那么如何确保用户的本地存储上的负载也会更改 我有一个问题,如果用户是管理员用户,当他登录时,jwt存储在他的本地存储中。之后,我将他的角色设置为普通用户,他仍然可以访问管理功能,因为他的本地存储包含AminUser角色 有人能建议一
谢谢。更改用户授权的触发因素是什么?如果您说您正在打开数据库客户端(例如MySQL或PostgreSQL)并手动更改用户的授权,那么您的服务器或客户端无法知道该更改(至少据我所知),并且他们无法对该特定更改做出反应 如果您的触发器是用户发送的某个请求,例如
注销
或更改授权
,那么您应该使用该特定请求的新令牌进行响应并将其存储,easy peasy
如果您的触发器与您的客户机无关,并且它是在您的服务器端发生的,那么您应该在服务器和客户机之间打开一个套接字,并将更改从服务器发送到客户机
这样,您就可以确保客户始终是最新的
但这还不够,因为你让客户保持最新,但是如果他保存了令牌并在你更新后替换了它呢?他/她仍然可以访问管理员功能,即使你告诉他们他们只是普通用户。为此,您需要验证您的任何用户所做的每个请求,并首先检查他们是否被允许提出该请求。您不能真正信任客户。您应该找到一种使jwt令牌无效的方法。当您拒绝您的客户机时,您的客户机应该获得一个新的令牌。您可以使用刷新键旋转令牌 为此:
- 保持你的代币寿命短
- 将列入黑名单的令牌存储在数据库中,并拒绝失效的令牌李>