node.js - 我们如何将 JWT 令牌存储在仅限 Http 的 cookie 中?
问题描述
我正在创建登录模块。
用户将输入用户名和密码。
如果用户验证成功,则服务器将返回 JWT 令牌。
我将使用 JWT 令牌来验证 React js 中的不同 API 调用。
现在我担心的是我找到了一些关于这个的文章然后我发现我们可以使用 http only cookie。我们如何实现 httponly cookie 方法来存储 JWT ?安全吗?
解决方案
HttpOnly cookie 是安全的,因为它们可以通过 Document.cookie API 防止浏览器访问,因此可以防止 XSS 攻击。
当您的用户成功验证后,服务器应该生成一个 jwt 令牌并将其作为 cookie 返回给您的客户端,如下所示:
return res.cookie('token', token, {
expires: new Date(Date.now() + expiration), // time until expiration
secure: false, // set to true if your using https
httpOnly: true,
});
cookie 可以通过来自您的客户端的传入 http 请求进行访问。您可以使用授权中间件函数检查 cookie 的 jwt 值,以保护您的 API 端点:
const verifyToken = async (req, res, next) => {
const token = req.cookies.token || '';
try {
if (!token) {
return res.status(401).json('You need to Login')
}
const decrypt = await jwt.verify(token, process.env.JWT_SECRET);
req.user = {
id: decrypt.id,
firstname: decrypt.firstname,
};
next();
} catch (err) {
return res.status(500).json(err.toString());
}
};
更多细节参考:https ://dev.to/mr_cea/remaining-stateless-jwt-cookies-in-node-js-3lle
推荐阅读
- python - Python将新数据迭代到嵌套字典中
- php - 如何处理 BLOB?
- ios - 为什么在我的自定义 UIView 类中没有调用 init(frame: CGRect)?
- c# - 使用 C#、Unity 游戏引擎在午夜创建重复事件
- xcode - AXUIElementCopyAttributeNames 在 Cocoa App 中返回 cannotComplete 但在操场上运行良好
- python - Numpy svd 与 Scipy.sparse svds
- firebase - 如何在本地测试`functions.https.onCall`firebase云功能?
- macos - 格式化 Dart 文件时 VSCode 不考虑选项卡大小
- python - 调度 Scrapy 蜘蛛在脚本的间隔运行
- bash - 如何在 bash 脚本中启动单独的 bash 脚本?