我在短时间内多次使用刷新令牌进行测试,但我不知道,Google刷新令牌会过期吗?或者我可以调用相同的刷新令牌以在很长一段时间(一周甚至几个月)内反复获取另一个访问令牌?
答案 0 :(得分:129)
Google Auth服务器发布的刷新令牌永不过期 - 这就是刷新令牌的重点。 当用户撤消对您的应用程序的访问权限时,刷新令牌将过期(或者我应该说是未经授权的)。
请参阅此 doc,它清楚地说明了刷新令牌的功能。
而不是发出持久令牌(通常好一年或无限生命), 服务器可以发出短期访问令牌和长期刷新令牌。 因此,总之,您可以反复使用刷新令牌,直到授权访问权限的用户撤消对您的应用程序的访问权限。
答案 1 :(得分:48)
这是一个非常令人困惑的话题。第一个答案似乎是正确的,但实际上并没有引用任何权威的谷歌。
我发现的最明确的答案实际上是在开发人员的游乐场中获取令牌。第2步底部有一个注释:
"注意:OAuth Playground不存储刷新令牌,但由于刷新令牌永不过期,如果用户希望手动撤销,则用户应转到他们的Google帐户授权访问权限页面。"
答案 2 :(得分:19)
我遇到了同样的问题,后来发现了我做的错误。 将其张贴在这里,以便其他人也可能会发现它很有用。
以下内容可以从 Google 文档 Using OAuth 2.0 to Access Google APIs 的 Refresh token expiration 部分阅读:
<块引用>为外部用户类型配置了 OAuth 同意屏幕且发布状态为“测试”的 Google Cloud Platform 项目获得了 7 天后到期的刷新令牌。
答案 3 :(得分:14)
我认为这不完全正确:
请注意,将发布的刷新令牌数量有限制;每个客户端/用户组合一个限制,所有客户端的每个用户另一个限制。您应该在长期存储中保存刷新令牌,并且只要它们保持有效就继续使用它们。如果您的应用程序请求太多刷新令牌,它可能会遇到这些限制,在这种情况下,旧的刷新令牌将停止工作。
从此页面:https://developers.google.com/youtube/v3/guides/authentication#installed-apps
这是来自youTube文档(我觉得它比其他api文档要好得多),但我认为它在所有谷歌应用程序中都是一样的。
答案 4 :(得分:4)
看到这个:
https://developers.google.com/accounts/docs/OAuth2WebServer 中的刷新令牌在用户撤消访问权限之前有效。仅当授权代码请求中包含access_type = offline时,才会显示此字段。
答案 5 :(得分:3)
2017年的某些时候规则发生了变化,所以我认为最好的答案取决于产品。例如,在Gmail API上,Oauth 2.0刷新令牌会在密码更改时到期。见https://support.google.com/a/answer/6328616?hl=en
我们曾经提前设置API访问并在设置新的Gmail用户时生成刷新令牌,然后我们可以存档他们的邮件(我们需要通过法律进行存档),但现在一旦他们更改了密码,刷新令牌已被撤销。
也许对于youtube,地图,刷新令牌仍然真的很长,但对于gmail api,指望一个短令牌。
答案 6 :(得分:2)
刷新令牌的主要概念是它持久且永不过期。
访问令牌有到期时间并且到期,一旦到期,我们可以去刷新令牌,这将被一次又一次地使用,直到用户从他的帐户撤销。
答案 7 :(得分:0)
请阅读以下内容:https://developers.google.com/identity/protocols/oauth2#expiration 您必须编写代码以预期授予的刷新令牌可能不再起作用的可能性。刷新令牌可能由于以下原因之一而停止工作:
用户已撤消您的应用访问权限。 刷新令牌已经六个月没有使用了。 用户更改了密码,刷新令牌包含Gmail范围。 用户帐户已超过已授予(实时)刷新令牌的最大数量。 当前,每个客户端每个用户帐户最多只能有50个刷新令牌。如果达到限制,则创建新的刷新令牌会自动使最旧的刷新令牌无效,而不会发出警告。此限制不适用于服务帐户。
用户帐户或服务帐户可在所有客户端上拥有的刷新令牌总数也有较大的限制。大多数普通用户不会超过此限制,但是开发人员的测试帐户可能会超出此限制。
答案 8 :(得分:0)
对于个人项目,只需在 Google Console 'Oauth Consent Screen' 标签上提交应用程序进行验证,以防止令牌过期。如果您不想验证该应用,则无需进一步执行任何操作。
答案 9 :(得分:-2)
我做了一些进一步的研究,似乎Google访问令牌用于在第一次离线&#39;期间检索刷新令牌。请求。从此时起,刷新令牌用于发出新的访问令牌。 这个想法是访问令牌是一个短期令牌,但它可以通过长期刷新令牌进行更新。这样就无需请求URL代码&#39;变量,需要两个端点方法,并且必须使用基于引用者的请求启动:
http://www.jensbits.com/2012/01/09/google-api-offline-access-using-oauth-2-0-refresh-token/
一些像Dropbox这样的REST API服务会发出永久持久的访问令牌,但Google会发布短期访问令牌。 PayPal使用折衷方案,允许在没有URI引用者强制执行的情况下检索访问令牌。这意味着可以检索访问令牌,而无需单击链接来启动该过程。 Google的方法意味着只应根据需要调用API例程。实质上,呼叫是通过基于引用者的程序启动的。这是通过发布短期访问令牌或访问必须在链中刷新的令牌来控制的。 这需要开发人员更仔细地考虑系统应该如何流动。