访问令牌和刷新令牌流程

4

我了解JWT、访问令牌和刷新令牌。我知道你必须设置访问令牌的过期时间很短(几分钟),并使用刷新令牌在访问令牌过期时获取新的访问令牌。

有三件事不太清楚:

  1. 谁检查访问令牌是否过期?是客户端检查并在发送过期的访问令牌和刷新令牌一起请求新的访问代码吗?
  2. 谁检查刷新令牌是否过期?(显然,刷新令牌也需要过期,尽管它需要更长时间才能过期。)
  3. 从我的角度来看,如果刷新令牌已过期,用户必须被提示重新登录。这是某些情况下需要避免的(移动应用程序)。如何避免这种情况?
1个回答

4

回答你的问题:

  • 使用访问令牌的API在访问令牌过期时会返回错误。
  • 使用刷新令牌获取新的访问令牌的API将返回特定的与刷新令牌相关的错误。
  • 有关刷新刷新令牌的信息,请参见下面的答案。

通常每次调用API都需要进行一些错误处理。

关于刷新刷新令牌

我进一步调查了一下,这是我找到的:

  1. 第一次登录并授权以获取访问令牌和刷新令牌(可选),如果访问令牌永远不会过期,则不需要刷新令牌。 => https://www.oauth.com/oauth2-servers/access-tokens/access-token-response/,最近(2019/11/16),我发现这真的取决于API提供者的实现,例如PayPal,他们提供带有过期时间但没有刷新令牌的访问令牌,因此当访问令牌过期时,您必须再次获取新的访问令牌。
  2. 访问令牌过期时,使用刷新令牌获取新的访问令牌和刷新令牌(可选)=>https://www.oauth.com/oauth2-servers/access-tokens/refreshing-access-tokens/。这次您有了一个新的刷新令牌,这意味着每次刷新访问令牌时都会有一个新的刷新令牌。如果响应没有新的刷新令牌,则您只有第一步中的旧刷新令牌。
  3. 如果用户长时间不使用该应用程序,则用户将没有机会刷新访问令牌和刷新令牌,因此当刷新令牌过期时,用户需要重新登录。
  4. 正如 @jwilleke 所说,即使用户不使用应用程序,服务器端或应用程序也可以自动为用户执行操作,然后它将始终具有新的访问令牌和刷新令牌。

根据您说的内容,使用刷新令牌时移动应用程序应提示您重新登录,每次刷新令牌过期。我不知道有哪些移动应用程序是这样工作的。 - pantonis
1
许多OAuth API使用的框架即使用户离线也会获取刷新令牌。 - jwilleke
我找到了更多的细节并添加到答案中,请看一下。@jwilleke谢谢你的想法。 - Guoyuan Zhao

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