Cod*_*ojo 5 cookies node.js express jwt
所以我对通过 JWT 授权的正确方法有点困惑,我知道一种常见的方法是您可以使用授权标头来验证它,如下所示:
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");
}
};
Run Code Online (Sandbox Code Playgroud)
但是,如果我在登录后使用 cookie 来存储我的 JWT 令牌,例如:
res.cookie("accessToken", accessToken, { httpOnly: true });
res.cookie("refreshToken", refreshToken, { httpOnly: true });
Run Code Online (Sandbox Code Playgroud)
这是否意味着我可以忽略上面的 authHeader 并直接使用 cookie 来验证我的令牌?就像是:
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");
}
};
Run Code Online (Sandbox Code Playgroud)
感谢您的任何澄清
我认为直接将令牌存储为 cookie 是一种不好的做法,因为任何访问计算机的人都可以访问它们。Cookie 存储在浏览器中时不受保护。
仅设置HttpOnly也是一种不好的做法,您还应该在 cookie 上设置Secure和SameSite属性,以使它们更安全。在将它们存储在 cookie 中之前最好对其进行加密。
更好的方法是查看BFF模式,如此处所述
为了补充这个答案,我写了一篇博客文章,更详细地介绍了这个主题:调试 cookie 问题
| 归档时间: |
|
| 查看次数: |
2517 次 |
| 最近记录: |