JWT是否需要刷新令牌

4

我正准备将我的身份验证策略从每天过期的httponly jwt更改为刷新/承载令牌方法。然而,由于刷新令牌可以创建新令牌,这是否会带来巨大风险?为什么人们推荐这样做?我有什么遗漏吗?

3个回答

4
如果您只需要一个旧的令牌来获取新鲜的令牌,那么它是无用的,因为任何截获令牌的人都可以定期刷新它并基本上拥有永久访问权限 - 就像一个永不过期的令牌。
如果刷新令牌不需要用户/密码并且使旧令牌失效,则是危险的,因为截获令牌的人可以同时为自己创建一个新令牌,并同时使真正用户的令牌失效。所以不仅某人会获得对您账户的访问权限 - 您也将失去访问权限,这更加伤害了您。
如果在获取新令牌后旧令牌仍然有效且不需要用户/密码,则截获令牌的人可以创建成千上万个新令牌,所有这些令牌都将有效,并且所有这些令牌都可以刷新以获取更多令牌。如果它们存储在数据库中,则可能成为拒绝服务攻击的向量。如果它们未存储在数据库中,则您无法知道其中哪些仍在流通中,也没有办法使其失效。
如果您需要使用用户/密码或其他凭据来获取新令牌,则意味着泄露的令牌仅在一段时间内有效,因为它无法仅使用令牌刷新,但这也意味着真正的用户需要更频繁地发送他们的用户/密码,这意味着更多拦截凭据的可能性。
我见过所有上述方法在现实世界中的实际服务中使用。

这正是我关心的问题,然而Auth0声称他们提高了安全性,这对我来说听起来很荒谬(请参见结论):https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/。让我困惑的是Stormpath也对它们发誓 https://stormpath.com/blog/build-secure-user-interfaces-using-jwts 。我是疯了还是为了令牌管理而冒着巨大风险? - user2331566
除此之外,Auth0 还建议将这些内容存储在 localStorage 中,这使得他们的整个安全策略不可信。然而,我尊重 Stormpath 的政策,所以这真的让我很纠结。 - user2331566

1

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

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

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

访问令牌仅在exp时间内有效。由于它们的寿命很短,因此潜在盗窃可能造成的损失有限。当访问令牌即将过期时,使用未受到威胁的刷新令牌从令牌端点获取新的短期访问令牌。


2
由于刷新令牌允许生成许多令牌,这难道不是一个严重的安全问题吗?一组计算机可以一起登录。实际上,你可能会授予任何人访问该人员账户的权限。 - user2331566
请参阅规范的12.1点(上面的链接)。_token endpoint_在发放新令牌之前必须对客户端进行身份验证,例如使用密钥或数字签名。即使攻击者窃取了刷新令牌,他也无法使用它,因为没有令牌终结点的身份验证凭据。刷新令牌是可选的,但例如OpenID Connect实施者如Google会使用它。还要注意,实现并不简单,如果令牌直接分发给用户(例如浏览器或设备)而没有后端,则刷新令牌并不太有用。 - pedrofb

0
因为刷新令牌会创建新的令牌,并在一定时间内使旧令牌过期,所以假设有人获得了您的令牌,但是由于您的服务器将自动使其过期,旧令牌对他的用处将很少或根本没有。

2
我的重点不在于令牌安全性,而在于刷新令牌的安全性。如果我作为黑客掌握了它,那么游戏就结束了,我可以随意生成令牌。我知道解决方法是令牌黑名单,但这样你就需要添加逻辑来识别被列入黑名单的刷新令牌。听起来像是一个非常冒险的游戏。 - user2331566
一个令牌也可以保存IP地址,因此即使黑客获得了您的令牌,他也必须获得与您相同的IP地址。 - Muhammad Faizan
是的,您正在谈论可以被黑客攻击的csrf防御。另外,xss攻击将规避IP防御,因为真实用户正在从自己的账户请求黑客攻击。让我们不要假设您的令牌不可达,也不要假设黑客无法让用户启动代码,问题是,一旦您创建了一个令牌工厂,就引入了一个可怕的漏洞。这些大型服务是如何说这是一个好系统的? - user2331566
@user2331566:你是如何解决刷新令牌的安全问题的? - j10
1
@jitenshah 不,我没有解决这个安全问题。然而,PayPal信誓旦旦地使用它的csrf库:https://www.paypal-engineering.com/2016/06/01/securing-your-js-apps-w-stateless-csrf/。所以,总体来说,jwt(仅限http)+ jwt-csrf似乎是安全的,他们说他们在这种组合中没有遇到任何问题。 - user2331566
@user2331566:感谢您提供的链接。所以,这似乎是针对基于Web的应用程序的修复,对于本机Android应用程序/iOS应用程序如何工作呢? - j10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接