【问题标题】:How can we store JWT token in Http only cookies?我们如何将 JWT 令牌存储在仅限 Http 的 cookie 中?
【发布时间】:2020-08-23 05:26:41
【问题描述】:

我正在创建登录模块。

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

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

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

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

【问题讨论】:

    标签: node.js reactjs express authentication 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,而只是将其发送到同一个域的请求中。
    猜你喜欢
    • 2017-02-10
    • 2015-09-15
    • 2016-09-13
    • 1970-01-01
    • 2021-01-21
    • 2021-10-16
    • 2021-02-11
    • 2017-12-13
    • 2022-01-15
    相关资源
    最近更新 更多