JWT刷新令牌与否

时间:2017-01-13 09:02:06

标签: node.js refresh jwt

我准备将我的身份验证策略从httponly中的直接jwt更改为每天一次到刷新/不记名令牌方法。但是,由于刷新令牌可以创建新的令牌,这不会带来巨大的风险吗?人们为什么推荐这个?我错过了什么

3 个答案:

答案 0 :(得分:2)

如果您需要获得新鲜的唯一东西是旧令牌,那么它就没用了,因为拦截令牌的任何人都可以定期刷新它并且基本上具有永久访问权限 - 就像永不过期的令牌一样。

如果刷新令牌并不需要用户/通过并使旧令牌无效,那么这是危险的,因为拦截令牌的人可以为自己制作新令牌,同时使真实用户的令牌无效。因此,不仅有人可以访问您的帐户 - 您自己也会失去访问权限,以增加对受伤的侮辱。

如果旧令牌在获得新令牌后仍然有效并且不需要用户/通行证,那么拦截令牌的人可以创建数千个新令牌并且所有令牌都有效,并且所有令牌都可以刷新以获得甚至更多的代币。如果它们存储在数据库中,那么它可以是拒绝服务攻击的向量。如果它们没有存储在数据库中,那么你无法知道哪一个仍在流通中,并且无法使它们失效。

如果您需要使用user / pass或其他一些凭据来获取新的令牌,那么这意味着泄露的令牌仅在一段时间内有效,因为它无法单独使用令牌进行刷新,但这也意味着真正的用户需要更频繁地发送他们的用户/通行证,这意味着更多可能拦截凭证。

我已经看到上述所有这些方法都在现实世界的真实服务中完成。

答案 1 :(得分:0)

因为刷新令牌会创建新的,但也会随着时间的推移而过期,所以让我们假设有人抓住你的令牌但是由于你的服务器会自动使它过期,旧的令牌很少或根本不会使用。

答案 2 :(得分:0)

OpenID on Oauth2中描述的访问和刷新令牌有不同的目的:

  • 访问令牌:授予对受保护资源的临时访问权限,使用寿命非常短,甚至一次性使用
  • 刷新令牌:允许获取新令牌,使用寿命长,必须保持安全。

在OAuth2授权流程中,在成功进行用户身份验证后,服务器会提供授权代码,该代码可用于第二步以获取访问权限。从令牌端点刷新令牌。刷新令牌被安全地存储,例如在服务器端。客户端代理使用访问令牌进行身份验证。

访问令牌仅在exp时间之前有效。由于它们是短暂的,因此潜在盗窃造成的损害是有限的。当访问令牌即将到期时,其安全性尚未受到损害的刷新令牌用于从令牌端点获取新的短期访问令牌