NodeJS httpOnly Cookies与用于传递JWT的授权标头

46scxncf  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(111)

所以我对传递JWT授权的正确方法有点困惑,我知道一个常见的方法是你可以使用一个Authorization头来验证它,就像这样:

const verifyToken = (req, res, next) => {
  const authHeader = req.headers.token;
  if (authHeader) {
    const token = authHeader.split(" ")[1];
    jwt.verify(token, process.env.JWT_KEY, (err, user) => {
      if (err) {
        res.status(403).json("Token is not valid!");
      }
      req.user = user;
      next();
    });
  } else {
    res.status(401).json("You're not authenticated");
  }
};

但是,如果我在登录后使用cookie来存储我的JWT令牌,例如:

res.cookie("accessToken", accessToken, { httpOnly: true });
res.cookie("refreshToken", refreshToken, { httpOnly: true });

这是否意味着我可以忽略上面的authHeader,直接从cookie中使用来验证我的Token?例如:

const verifyToken = (req, res, next) => {
  //USING TOKEN FROM COOKIES
  const accessToken = req.cookies.accessToken;
  const refreshToken = req.cookies.refreshToken;
  if (accessToken && refreshToken) {
    jwt.verify(accessToken, process.env.JWT_KEY, (err, user) => {
      if (err) {
        res.status(403).json("Token is not valid!");
      }
      req.user = user;
      next();
    });
  } else {
    res.status(401).json("You're not authenticated");
  }
};

感谢任何澄清

x6yk4ghg

x6yk4ghg1#

我认为直接将令牌存储为cookie是一种不好的做法,因为任何访问计算机的人都可以访问它们。Cookie存储在浏览器中时不受保护。
只设置HttpOnly也是不好的做法,您还应该在cookie上设置SecureSameSite属性,以使它们更安全。更好的方法是在将它们存储在cookie中之前对其进行加密。
更好的方法是查看BFF模式,如here所述
为了补充这个答案,我写了一篇博客文章,更详细地介绍了这个主题:Debugging cookie problems

相关问题