Node.js 将JWT分成两个cookie

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,以实现更好的实践方法,从而更安全地抵御XSS和CSRF攻击。(在研究过程中,我感到非常困惑,所以请随意更正我),所以基本上这就是我发现的

  • 把JWT分成两块饼干
  • 使用httpOnly、secure和sameSite标志保存头+签名
  • 使用httpOnly标志false保存有效负载
我对开发环境相当陌生,所以,老实说,我被困在这一点上。我试图实现的想法是否准确?这条路对吗?我在同一页上发送这两个邮件是否安全

下面是我的代码

-Helpers/Authorization/jwtHelpers.js

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”就可以了解如何做到这一点。