我们如何将 JWT 令牌存储在仅限 Http 的 cookie 中?
Posted
技术标签:
【中文标题】我们如何将 JWT 令牌存储在仅限 Http 的 cookie 中?【英文标题】:How can we store JWT token in Http only cookies? 【发布时间】:2020-08-23 05:26:41 【问题描述】:我正在创建登录模块。
用户将输入用户名和密码。
如果用户验证成功,则服务器将返回 JWT 令牌。
我将使用 JWT 令牌来验证 React js 中的不同 API 调用。
现在我担心的是,我找到了一些关于此的文章,然后我发现我们只能使用 http cookie。我们如何实现 httponly cookie 方法来存储 JWT ?安全吗?
【问题讨论】:
【参考方案1】: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,
);
可以通过来自您的客户端的传入 http 请求访问 cookie。您可以使用授权中间件函数检查 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
【讨论】:
谢谢。现在我将如何使用 JWT 来验证其他路由,因为我必须将 JWT 令牌作为其他路由的标头发送。我将如何在客户端获得 JWT 令牌的访问权限? 对于同一域的任何请求,浏览器都会自动将 cookie 添加到 Cookie HTTP 标头中。 HttpOnly cookie 的要点是客户端永远不会显式访问 cookie,而只是将其发送到同一个域的请求中。以上是关于我们如何将 JWT 令牌存储在仅限 Http 的 cookie 中?的主要内容,如果未能解决你的问题,请参考以下文章
如何判断用户是不是使用仅限 http 的 cookie 和 JWT 登录(客户端)
为啥将刷新令牌存储在仅 HTTP 的 Cookie 中以防止 CSRF 攻击?
openid 连接 2.0 并在仅 http cookie 中设置身份验证 JWT