访问令牌和刷新令牌流程

Posted

技术标签:

【中文标题】访问令牌和刷新令牌流程【英文标题】:Access Token and Refresh Token flow 【发布时间】:2020-01-09 20:18:46 【问题描述】:

我已阅读有关 JWT 和访问令牌和刷新令牌的信息。我了解您必须在很短的时间(分钟)内设置访问令牌过期,并在过期时使用刷新令牌获取新的访问令牌。

我不清楚三件事:

    谁检查访问令牌是否过期?客户端是否通过发送过期的访问令牌和刷新来检查并请求新的访问代码? 谁检查刷新令牌是否过期? (很明显,刷新令牌也需要过期,虽然过期需要更长的时间)。 在我看来,如果刷新令牌过期,则必须提示用户重新登录。这是在某些场景(移动应用程序)中需要避免的事情。如何避免?

【问题讨论】:

【参考方案1】:

回答你的问题:

访问令牌过期时API使用访问令牌会返回错误。 API 使用刷新令牌获取新的访问令牌将返回特定刷新令牌相关的错误。 关于刷新令牌的刷新,请看下面的回答。

通常您需要为每个 API 调用做一些错误处理。

关于刷新令牌的刷新

我调查了更多,这就是我发现的:

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

【讨论】:

您所说的刷新令牌移动应用程序应该会在每次刷新令牌过期时提示您重新登录。我不知道有任何以这种方式工作的移动应用程序 许多 OAuth API 使用的框架即使在用户离线时也会获取刷新令牌。 我发现了更多细节并添加到答案中,请看一下。 @jwilleke 谢谢你的想法。

以上是关于访问令牌和刷新令牌流程的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 客户端凭据重新颁发访问令牌与刷新令牌

为什么访问令牌会过期?

使用 nodejs 应用程序上的刷新和访问令牌了解身份验证流程

何时用刷新令牌交换访问令牌

新帐户上的 Google API(分析)访问令牌和刷新令牌错误

在刷新重定向页面时丢失访问令牌