我想永远使用 Google API 刷新令牌

kan*_*ane 4 google-api google-oauth google-developers-console

有一个过程通过 Google API 的 OAuth 身份验证获取刷新令牌,然后从刷新令牌获取访问令牌以验证收据。

有一天,刷新令牌突然过期,收据验证失败。我们的服务已停止处理计费。下面是失败时的错误。

{
  "error": "invalid_grant",
  "error_description": "Token has been expired or revoked."
}
Run Code Online (Sandbox Code Playgroud)

我认为刷新令牌每次使用时都会重置其过期日期,那么为什么它们会过期呢?我认为以下规则不适用。

您必须编写代码来预测授予的刷新令牌可能不再起作用的可能性。这些原因:

  • 用户已撤销您的应用的访问权限。
  • 刷新令牌已六个月未使用。
  • 用户更改了密码,并且刷新令牌包含 Gmail 范围。
  • 用户帐户已超出授予的(实时)刷新令牌的最大数量。
  • 用户所属的 Google Cloud Platform 组织具有有效的会话控制策略。(https://developers.google.com/identity/protocols/oauth2

我想永远使用刷新令牌。先感谢您。

DaI*_*mTo 13

刷新令牌在设计上不会过期,有一些事情可能会导致它们过期,正如您所列出的那样。然而,还有一个你没有列出来。

如果您检查Experation的文档,您会发现它也说。

在此输入图像描述

如果您的应用程序处于测试阶段,请将其设置为生产环境,您的刷新令牌将停止过期。

在此输入图像描述

因此,只要您的应用程序处于生产状态,用户就不会撤销您的访问权限,并且他们为该用户拥有的未完成刷新令牌少于 50 个,并且您在过去六个月中至少使用过一次。(gmail 范围内的用户不会更改其密码)。刷新令牌不应过期。

话虽这么说,您的系统应该设计为处理刷新令牌过期并再次请求用户访问。或者通知管理员如果这是后端系统。