每次发送请求时刷新访问令牌为什么是个不好的主意?

4

我正在开发React Native应用,使用OAuth2来获取访问令牌、刷新令牌和到期时间。当我登录我的应用程序时,我会检查我的令牌的到期时间,并在发送请求(GET、POST)时进行验证。如果我的令牌已过期,则使用刷新令牌获取新的访问令牌。我的同事告诉我,我不需要检查到期时间,只需在每次发送请求时使用刷新令牌获取访问令牌即可。我知道他的方法不正确,但如果我使用他的方法会发生什么?为什么每次发送请求都刷新访问令牌是不好的呢?

2个回答

4

由于会增加网络往返次数,使您的应用程序变得比必要的更慢,并增加了令牌服务的负载。

这样会导致扩展问题和糟糕的用户体验。


1
你的同事可能建议你这样做,这也是我经常编写这些代码的方式:
  • 在每个请求中发送当前访问令牌到API
  • 最终访问令牌将返回401
  • 然后使用刷新令牌获取新的访问令牌+重试API调用
  • 最终令牌更新请求将因无效授权错误而失败,用户必须重新登录
也就是说,只有在访问令牌过期时才进行刷新,而不是在每个请求上都进行刷新。你避免依赖访问令牌的过期时间,因为API可以因多种原因拒绝令牌。

3
你的观点还需要补充一点,当使用刷新令牌时,后端应该返回一个新的访问令牌和一个新的刷新令牌。这被称为轮换刷新令牌,并且由IETF 在此处推荐,因为它有助于检测令牌盗窃。你也可以阅读这篇博客来了解实现细节。 - Rishabh Poddar

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