问题描述
执行计算引擎
api(GET https://compute.googleapis.com/compute/v1/projects/{project}/zones/{zone}/instances/{resourceId}) with oauth 2.0 client id.
我创建了一个 OAuth2.0 客户端 ID,并根据本网站上的步骤获得了 access_token 和 refresh_token。
Obtaining OAuth 2.0 access tokens
Refreshing an access token (offline access)
我可以使用刷新的 access_token 执行 api。
3 天后,再次运行此步骤,
https://developers.google.com/identity/protocols/oauth2/web-server#offline
回复是
json
{ "error": "invalid_grant","error_description": "Token has been expired or revoked." }
为什么 refresh_token 过期了?
refresh_token 可用于获取新访问令牌的令牌。刷新令牌在用户撤销访问之前一直有效。同样,如果您在对 Google 授权服务器的初始请求中将 access_type 参数设置为离线,则此字段仅出现在此响应中。
解决方法
有很多事情会导致刷新令牌过期。
- 您使用的是 gmail 范围并且用户更改了他们的密码。
- 六个月内未使用。
- 该用户已撤销您对其 Google 帐户的访问权限。
- 如果用户运行您的应用程序,您将获得一个刷新令牌,如果他们再次运行该应用程序,您将获得一个不同的刷新令牌,您最多可以执行 50 次并获得新的刷新令牌,它们将在第 50 次之后全部工作一个会过期。确保您始终保存最重发的刷新令牌。
- 您的应用目前正在测试中,尚未设置为发布,也未通过验证过程。