HTTP 仅适用于 JWT?

Posted

技术标签:

【中文标题】HTTP 仅适用于 JWT?【英文标题】:HTTP only for 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。 【参考方案1】:

JWT 规范说:

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

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

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

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

【讨论】:

以上是关于HTTP 仅适用于 JWT?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断用户是不是使用仅限 http 的 cookie 和 JWT 登录(客户端)

http.ListenAndServe 仅适用于本地主机?

错误:包装函数仅适用于 `onCall` HTTP 函数,不适用于 `onRequest`

Xamarin Http 请求仅适用于 iOS 模拟器

仅适用于在 Android 上远程调试 JS

Web API 2 - CORS 仅适用于 HTTPS(而非 HTTP)