【问题标题】:Do Google refresh tokens expire?Google 刷新令牌会过期吗?
【发布时间】:2012-02-15 18:15:21
【问题描述】:

我在短时间内多次使用刷新令牌进行测试,但我想知道 Google 刷新令牌是否会过期?我可以长时间(一周甚至几个月)使用同一个刷新令牌来一次又一次地获取另一个访问令牌吗?

【问题讨论】:

  • 您使用的是 ruby​​,还是有相应的代码示例?

标签: google-api token access-token


【解决方案1】:

为 OAuth 令牌设置较长的过期时间

在 OAuthv2 策略中为访问令牌和/或刷新令牌设置较长的过期时间会导致 OAuth 令牌累积并增加 Cassandra 节点上的磁盘空间使用量。

以下示例 OAuthV2 策略显示刷新令牌的过期时间为 200 天:

<OAuthV2 name="GenerateAccessToken">
<Operation>GenerateAccessToken</Operation>
<ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
<RefreshTokenExpiresIn>17280000000</RefreshTokenExpiresIn> <!-- 200 days -->
<SupportedGrantTypes>
  <GrantType>password</GrantType>
</SupportedGrantTypes>
<GenerateResponse enabled="true"/>

link here

在上面的例子中:

  • 访问令牌设置为合理地缩短了 30 分钟的到期时间。
  • 刷新令牌设置为 200 天的非常长的过期时间。
  • 如果此 API 的流量为 10 个请求/秒,那么它一天可以生成多达 864,000 个令牌。
  • 由于刷新令牌仅在 200 天后过期,它们会在数据存储 (Cassandra) 中保留很长时间,从而导致持续累积。

【讨论】:

    【解决方案2】:

    如果项目发布状态为“测试”,则刷新令牌实际上会在 7 天后过期。根据谷歌文档:

    为外部用户类型配置了 OAuth 同意屏幕且发布状态为“正在测试”的 Google Cloud Platform 项目发出了一个在 7 天后到期的刷新令牌。

    Link to quote

    【讨论】:

      【解决方案3】:

      对于个人项目,只需在 Google Console“Oauth 同意屏幕”选项卡上提交应用程序以进行验证,以防止令牌过期。如果您不希望应用通过验证,则无需进一步操作。

      【讨论】:

      • 你能提供更多细节吗?当您说“提交应用程序进行验证”时,您的意思是转到“部署”选项卡并单击“开始新版本”,然后选择“生产”吗?但在这种情况下,Google 会审核您的产品……
      • 其实我认为它来自这个屏幕:console.cloud.google.com/apis/credentials/… 有一个“发布状态”,它在“测试”中是正确的。从那里你可以点击发布按钮。
      • 是的,@AymKdn 是对的,它在 Google Console 上。提交您的应用以进行发布,但无需跟进,因为 Google 会在提交后自动删除令牌过期时间。我会修改我的答案。
      【解决方案4】:

      我遇到了同样的问题,后来发现我正在做的错误。 在这里发布它,以便其他人也可能会发现它有用。

      以下内容可以阅读谷歌文档Using OAuth 2.0 to Access Google APIsRefresh token expiration部分:

      为外部用户类型配置了 OAuth 同意屏幕且发布状态为“正在测试”的 Google Cloud Platform 项目发出了一个在 7 天后到期的刷新令牌。

      【讨论】:

      • 我提交了应用程序进行验证,现在令牌没有过期。当然,暂时不打算验证应用程序。
      • 谷歌真的把领导埋没了。这很残酷。
      • @individual8 如果您的意思是这样,则无需提供任何文件。我记得我只需要点击“发布”按钮。
      • @yebowhatsay 谢谢。我也发布了我的并解雇以提供任何验证信息。让我们看看新创建的刷新令牌是否在 7 天后再次过期。
      • @DaveTheMinion 是的,确实如此。
      【解决方案5】:

      从以下地址阅读:https://developers.google.com/identity/protocols/oauth2#expiration 您必须编写代码来预测授予的刷新令牌可能不再起作用的可能性。由于以下原因之一,刷新令牌可能会停止工作:

      用户已撤消您应用的访问权限。 刷新令牌已六个月未使用。 用户更改了密码,并且刷新令牌包含 Gmail 范围。 用户帐户已超过授予(实时)刷新令牌的最大数量。 当前每个客户端每个用户帐户的刷新令牌限制为 50 个。如果达到限制,则创建新的刷新令牌会自动使最旧的刷新令牌失效,而不会发出警告。此限制不适用于服务帐号。

      用户帐户或服务帐户在所有客户端上可以拥有的刷新令牌总数也有更大的限制。大多数普通用户不会超过此限制,但开发者的测试帐户可能会。

      【讨论】:

        【解决方案6】:

        刷新令牌的主要概念是持久且永不过期。

        访问令牌有一个到期时间并且它会到期,一旦它到期我们可以去获取刷新令牌,它将被一次又一次地使用,直到用户撤销他的帐户。

        【讨论】:

          【解决方案7】:

          规则在 2017 年的某个时候发生了变化,所以我认为最好的答案是它取决于产品。例如,在 Gmail API 上,Oauth 2.0 刷新令牌会在密码更改时过期。看到这个https://support.google.com/a/answer/6328616?hl=en

          我们曾经在设置新 gmail 用户时提前设置 API 访问并生成刷新令牌,然后我们可以存档他们的邮件(法律要求我们这样做),但现在只要他们更改密码,刷新令牌被撤销。

          也许对于 youtube、maps 来说,刷新令牌仍然是真正长寿的,但对于 gmail api,则指望一个短令牌。

          【讨论】:

          【解决方案8】:

          Google Auth 服务器发出的刷新令牌永不过期——这就是刷新令牌的全部意义所在。 当用户撤销对您的应用程序的访问权限时,刷新令牌将过期(或者我应该说成为未经授权的)。

          参考这个 doc 它清楚地说明了刷新令牌的功能。

          而不是发行持久的令牌(通常有效期为一年或无限期), 服务器可以发出短期访问令牌和长期刷新令牌。 因此,简而言之,您可以一次又一次地使用刷新令牌,直到授权访问的用户撤销对您的应用程序的访问。

          【讨论】:

          • “一年好”部分使它不像你建议的那么清楚;但由于它在实践中似乎不会引起问题,我假设刷新令牌是常绿的。
          • 令牌到期 您应该编写代码来预测授予的令牌可能不再起作用的可能性。令牌可能由于以下原因之一停止工作: 用户已撤销访问权限。该令牌已六个月未使用。用户帐户已超过一定数量的令牌请求。目前每个 Google 用户帐户有 25 个令牌的限制。如果用户帐户有 25 个有效令牌,则下一个身份验证请求会成功,但会悄悄地使最旧的未完成令牌无效,而不会发出任何用户可见的警告。 (来自developers.google.com/accounts/docs/OAuth2
          • “长寿命”刷新令牌与“永不过期”不同。
          • @Shadow 如果刷新令牌很少过期,如建议的那样,为什么谷歌不首先发出一个未过期的访问令牌。据我了解,使用 oAuth 2.0 发布的访问令牌可用于请求刷新令牌。为什么不只拥有一个永久访问令牌,并减少对刷新令牌的额外调用。
          • 文档链接抛出 404
          【解决方案9】:

          这是一个非常令人困惑的线程。第一个答案似乎是正确的,但实际上并没有引用谷歌的任何权威。

          我找到的最确定的答案实际上是在您获得令牌的开发者游乐场中。第 2 步底部有一条注释:

          “注意:OAuth Playground 不存储刷新令牌,但由于刷新令牌永不过期,如果用户想要手动撤销它们,则应转到其 Google 帐户授权访问页面。”

          https://developers.google.com/oauthplayground/

          【讨论】:

          • 最佳答案在这里 - 为什么没有人投票令人难以置信 - 非常感谢 - 将刷新令牌视为永不过期 - 但是在登录时检查新令牌以防用户撤销刷新令牌,在此场景谷歌将在登录时提供一个新的刷新令牌,所以只需更新刷新令牌
          【解决方案10】:

          看到这个:

          刷新令牌在用户撤销访问权之前一直有效。只有在授权码请求中包含 access_type=offline 时,才会出现此字段。

          https://developers.google.com/accounts/docs/OAuth2WebServer

          【讨论】:

            【解决方案11】:

            我不认为这是完全正确的:

            请注意,将发行的刷新令牌的数量是有限制的;每个客户端/用户组合一个限制,所有客户端的每个用户另一个限制。您应该将刷新令牌保存在长期存储中,并在它们保持有效时继续使用它们。如果您的应用程序请求太多刷新令牌,它可能会遇到这些限制,在这种情况下,旧的刷新令牌将停止工作。

            从此页面:https://developers.google.com/youtube/v3/guides/authentication#installed-apps

            这是来自 youtube 文档(我发现它比其他 api 文档好得多),但我认为所有谷歌应用程序都是一样的。

            【讨论】:

              猜你喜欢
              • 2021-08-25
              • 2018-04-07
              • 1970-01-01
              • 1970-01-01
              • 2019-01-21
              • 2017-10-19
              • 2018-08-05
              • 1970-01-01
              • 2016-11-12
              相关资源
              最近更新 更多