ChatGPT解决这个技术问题 Extra ChatGPT

Google 刷新令牌会过期吗?

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

你在使用 ruby,或者你有代码示例吗?

J
Jonathan Leffler

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

请参阅此 doc,它清楚地说明了刷新令牌的功能。

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


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

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

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

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

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


这里的最佳答案 - 为什么没有人投票令人难以置信 - 非常感谢 - 将刷新令牌视为永不过期 - 但是在登录时检查新令牌以防用户撤销刷新令牌,在这种情况下,Google 将提供一个新的刷新令牌登录时,只需更新刷新令牌
s
stvar

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

可以从 Google 文档 Using OAuth 2.0 to Access Google APIsRefresh token expiration 部分中读取以下内容:

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


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

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

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

Link to quote


这个^.我想知道为什么谷歌不能将它添加到列表本身而不是段落中。我错过了这一点。
终于有答案了。谢谢!我想是时候发布了...
R
Roaders

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

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

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

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


T
TonyE

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

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

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


看起来它已于 2016 年 10 月 5 日正式发布。developers.googleblog.com/2016/09/…
k
karl

看到这个:

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

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


J
Jos Luijten

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

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

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


这应该是 2022 年公认的答案
y
yebowhatsay

对于个人项目,只需在 Google Console“Oauth Consent Screen”选项卡上提交应用程序以进行验证,以阻止令牌过期。如果您不想验证应用程序,则无需做任何进一步的事情。


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

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

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


H
Hasmukh Dharajiya

为 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)中持续存在很长时间,导致不断积累。