负载中的安全 JWT

Security JWT in payload

我正在开发 REST API,我对通过 JWT 进行身份验证的正确方法是什么、令牌的有效负载中包含哪些信息以及最佳实践是什么有一些疑问最安全的:

在负载令牌中包含 mongoDB 的 ObjectId 是否安全?

{
  "sub": "507f191e810c19729de861ea",
  "name": "John Doe",
  "rol": "admin"
}

检查令牌中的 'sub' 后,如果用户导航到受保护的路由,例如:

“api/dashboard /: userId“

并在请求中进行比较,这个例子在Express.js

.get('api/dashboard/:userId', (req, res)=> {
  if(Req.params.uiserID != token.payload.sub) {
     Res.status(401).send({ message: ‘No authorization’})   
 } 
})

以上是否安全?

sub 声明标识作为 JWT 主题的委托人,并且预计在发行者(或全局)上下文中是唯一的。发送内部 ID 并不是一个坏习惯,只要您尊重它的唯一性,不要更改并且不要泄露私人数据。 (内部十六进制字符串不能被认为是私有的)

在服务器端,您需要验证令牌的签名以检查真实性以及数据是否未被更改。之后可以安全地使用 JWT

中嵌入的数据检查对受保护资源的访问