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 登录(客户端)