因此,我对通过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");
}
};但是,如果我在登录后使用cookie存储JWT令牌,如:
res.cookie("accessToken", accessToken, { httpOnly: true });
res.cookie("refreshToken", refreshToken, { httpOnly: true });这是否意味着我可以忽略上面的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");
}
};谢谢你的澄清
发布于 2021-12-10 11:44:36
我认为将令牌直接存储为cookie是一种不好的做法,因为任何人访问计算机都可以访问它们。cookies在浏览器中存储时不受保护。
仅仅设置HttpOnly也是一种糟糕的做法,您还应该在cookies上设置 secure 和SameSite属性,以使它们更加安全。在你把它们储存在饼干里之前,最好先加密它们。
更好的方法可以是查看BFF模式,如所描述的这里。
https://stackoverflow.com/questions/70302476
复制相似问题