Node.js 将JWT分成两个cookie
我一直在研究JWT,以实现更好的实践方法,从而更安全地抵御XSS和CSRF攻击。(在研究过程中,我感到非常困惑,所以请随意更正我),所以基本上这就是我发现的Node.js 将JWT分成两个cookie,node.js,express,jwt,Node.js,Express,Jwt,我一直在研究JWT,以实现更好的实践方法,从而更安全地抵御XSS和CSRF攻击。(在研究过程中,我感到非常困惑,所以请随意更正我),所以基本上这就是我发现的 把JWT分成两块饼干 使用httpOnly、secure和sameSite标志保存头+签名 使用httpOnly标志false保存有效负载 我对开发环境相当陌生,所以,老实说,我被困在这一点上。我试图实现的想法是否准确?这条路对吗?我在同一页上发送这两个邮件是否安全 下面是我的代码 -Helpers/Authorization/jwtH
- 把JWT分成两块饼干
- 使用httpOnly、secure和sameSite标志保存头+签名
- 使用httpOnly标志false保存有效负载
module.exports = {
sendJwtToClient: (user,res)=>{
let token = user.generateJWT();
const [header,payload,signature] = token.split(".");
const {JWT_COOKIE,NODE_ENV} = process.env;
//Signature & Header cookie should have httpOnly flag = true
res.status(200).cookie("access_token",header+signature,{
httpOnly:true,
sameSite:true,
secure:true,
//Payload cookie should have httpOnly flag = false
}).cookie("access",payload,{
httpOnly:false,
secure:true,
sameSite:true,
expires:new Date(Date.now()+parseInt(JWT_COOKIE) + 1000 * 60),
}).json({
success:true
})
}
}
/Models/User.js
schema.methods.generateJWT = function () {
const { JWT_SECRET } = process.env;
const payload = {
_id: this._id,
email: this.email
}
const token = jwt.sign(payload, JWT_SECRET, {
expiresIn: "30m"
})
return token;
}
正如我之前所说,请随时纠正或指导我,因为我太困惑了。我不认为这样做有什么意义。JWT在理论上是防篡改的,因为服务器可以很容易地检测到来自外部的传入JWT是否被篡改。但是,JWT仍然对任何人可见/可读。如果后者是一个问题,那么您也应该加密JWT。拆分成两个单独的cookie给我的印象是,这是一个没有多大好处的工作。嗨,谢谢你的评论。你有什么建议?你能告诉我关于这个主题的任何链接或帖子吗?在我评论的第一部分,你不需要“做”任何事情,JWT模式已经提供了这种保护。对于第二部分,只需通过谷歌搜索“encrypt JWT”就可以了解如何做到这一点。