【问题标题】:HTTP only for JWT?HTTP 仅适用于 JWT?
【发布时间】:2017-11-17 02:21:50
【问题描述】:

我的 JWT 应该是 HTTPOnly 吗?我目前是这样创建它们的:

const token = jwt.sign(user, config.secret, {
                     expiresIn: 604800 // 1 week
                 });
    new Cookies(req,res).set('access_token',token,{
        httpOnly: false,
        secure: false      // for your production environment
    });

然后使用 Universal-cookie 让它们像这样:

const cookies = new Cookies();
var token = cookies.get('access_token');

这安全吗?如果没有,或者有其他理由不这样做,我应该怎么做?如果 JWT cookie 仅为 http,则 get 请求返回为未定义。

谢谢,埃德。

【问题讨论】:

  • 我通常在 JSON 响应中返回令牌。然后客户端应该使用标头在每个请求上发送令牌。这种方法使我能够使用相同的 API 有效地与 web 应用程序以及本机应用程序进行通信;)
  • 谢谢,您不会知道有任何文章/教程可以告诉我如何做到这一点吗?谢谢;)
  • 谁在验证访问令牌?如果它支持您,请使用 httpOnly:false 和 github.com/kjur/jsrsasign/wiki/Tutorial-for-JWS-verification。如果这不是您的交易部分并且令牌由后端验证,请使用 httpOnly:true。在这两种情况下都使用secure:true。

标签: reactjs cookies jwt jsx


【解决方案1】:

JWT 规范说:

JSON Web Token (JWT) 是一种紧凑的声明表示格式 用于空间受限的环境,例如 HTTP 授权 标头和 URI 查询参数。

因此它声明它旨在用于 HTTP 授权标头和 URI 查询参数。您可以将其用作 cookie,因为规范并未禁止它。我可以想象使用 JWT 令牌作为 cookie 并且特别是 HttpOnly 是合理的用例。现在关于使其成为 HttpOnly 的问题取决于以下几点:

  1. 您需要从客户端代码 (JavaScript) 访问它吗?
  2. 泄露令牌对潜在攻击者有什么影响吗?

如果您不需要从客户端代码访问它,或者公开令牌会产生影响,则将其设为 HttpOnly。

【讨论】:

    猜你喜欢
    • 2018-05-24
    • 2014-07-23
    • 2015-02-15
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多