3

时当试图走出Google Cloud Storage sample(或任何调用write使用cloudstorage模块文件,在其他项目也一样)我得到一个下面的错误获取AccessTokenRefreshError“invalid_grant”上dev_appserver使用云端储存

INFO  2016-12-05 01:16:06,999 client.py:804] Refreshing access_token 
INFO  2016-12-05 01:16:07,198 client.py:827] Failed to retrieve access token: { 
    "error" : "invalid_grant" 
} 
ERROR 2016-12-05 01:16:07,200 api_server.py:272] Exception while handling service_name: "app_identity_service" 
method: "GetAccessToken" 
request: "\n7https://www.googleapis.com/auth/devstorage.full_control" 
request_id: "YpfXhQJczA" 

... long long stack traces ... 

RuntimeError: AccessTokenRefreshError(u'invalid_grant',) 

问题是,当我将应用程序部署到Google App Engine时,调用工作正常。

回答

8

我花了几个小时搜索和调试客户端代码,直到我发现oauth2client正在使用某些存储在文件系统某处的default application credentials。似乎这些凭证可能是GAE SDK以前版本中的遗留信息,其中包括旧版刷新令牌,但被Google拒绝。

在窗户的凭据存储在

C:\Users\$USER\AppData\Roaming\gcloud\application_default_credentials.json 

最简单的方法来重新创建这些凭证与gcloud工具:

$ gcloud auth application-default login 

(注:gcloud auth login只有建立凭证与工作gcloud实用程序本身,而不是您的应用程序调用Google客户端库,所以不是这里需要的)。

希望这可以节省别人几个小时。

+3

我可以证实这让我省了几个小时。 – Mark

相关问题