首页 > 解决方案 > 我们如何将 JWT 令牌存储在仅限 Http 的 cookie 中?

问题描述

我正在创建登录模块。

  1. 用户将输入用户名和密码。

  2. 如果用户验证成功,则服务器将返回 JWT 令牌。

  3. 我将使用 JWT 令牌来验证 React js 中的不同 API 调用。

现在我担心的是我找到了一些关于这个的文章然后我发现我们可以使用 http only cookie。我们如何实现 httponly cookie 方法来存储 JWT ?安全吗?

标签: node.jsreactjsexpressauthenticationjwt

解决方案


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


推荐阅读