我正在开发一个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’})
}
})
以上认为安全吗?
答案 0 :(得分:0)
sub
声明标识了作为JWT主题的主体,并且在发行者(或全局)的上下文中应该是唯一的。发送内部ID并不是一种不好的做法,只要您认为它是唯一的,不要改变并且不要泄露私人数据。 (内部十六进制字符串不能被视为私有)
在服务器端,您需要验证令牌的签名以检查真实性并且数据未被更改。在此之后可以使用JWT中嵌入的数据检查对受保护资源的访问是否安全