JWT 令牌不特定于用户

Posted

技术标签:

【中文标题】JWT 令牌不特定于用户【英文标题】:JWT Token Not Specific to User 【发布时间】:2020-10-20 18:53:03 【问题描述】:

在我的 NodeJs (express +MongoDB) 中,我使用 JWT 令牌来允许用户路由,例如更改密码、更新用户..

但是,给出的 JWT 令牌并不特定于一个用户,因为它允许另一个用户访问所有路由并在给定正确路由(包括 id)的情况下对任何用户进行更改。路由通过 id 工作,位于参数。用户的 id 也集成在令牌的负载中。

我怎样才能让每个用户都可以访问自己的路线而不是其他用户的路线?

【问题讨论】:

路由通常发生在访问控制检查之前,因此所有用户通常都能够“访问所有路由”(但不能执行路由集中的每个操作)。如果您希望除令牌之外还通过用户 ID 限制访问,请在您的操作/操作前回调中验证两者。 【参考方案1】:

好的,我们来看一个例子

如果我的用户试图访问他自己的帖子/post:id,则路由应该是这样的,id 作为请求的查询参数发送,但如果你不想那样做 然后假设用户已经将令牌发送到/posts,并且他正在向那个发出请求 那么

router.get('/posts',(req,res)=>)
  //verfiy the token 
  //if the token is valid cont // else send(403)
  // get the userID from it 
  res.redirect('/posts/<userId>);

【讨论】:

以上是关于JWT 令牌不特定于用户的主要内容,如果未能解决你的问题,请参考以下文章

使 JWT(JSON Web 令牌)持续更长时间或 Flutter 应用程序的其他替代方案

JWT jti 唯一性

使以前的令牌无效并检查用户是不是有 JWT 令牌

如何使用标头中的用户 JWT 令牌转发授权并将其与 cookie 中的 JWT 令牌进行比较以验证用户?

jwt 访问令牌和刷新令牌流

使用 jwt 令牌认证识别用户