Google API会在生产中返回invalid_grant,但不会在本地返回

时间:2015-08-13 16:02:14

标签: python google-api google-play-services

我在python中使用谷歌API有一个非常奇怪的例外。目标是在服务器端检查与来自Android应用程序的应用内订阅相对应的令牌的有效性。

为此,我们在Google Play帐户中附加了一个服务帐户,我们尝试使用oauth通过p12密钥验证我们的请求(转换为pem证书以删除密码短语):

from apiclient.discovery import build
from httplib2 import Http
from oauth2client.client import SignedJwtAssertionCredentials

with open("googleplay.pem") as f:
    private_key = f.read()
credentials = SignedJwtAssertionCredentials(GOOGLE_CLIENT_EMAIL, private_key, scope=['https://www.googleapis.com/auth/androidpublisher'])
http_auth = credentials.authorize(Http())
client = build('androidpublisher', 'v2', http=http_auth)

这在我的电脑上完美运行。但是最后一行在我的服务器上触发了一个异常:invalid_grant

我不明白这可能来自哪里!如果你可以帮助我们,那我们就太棒了!

我用来将p12证书转换为pem证书的其他代码:

openssl pkcs12 -in privatekey.p12 -nodes -nocerts > privatekey.pem

然后我删除了前4行。

提前致谢!

2 个答案:

答案 0 :(得分:1)

我有完全相同的问题。

我通过使用NTP

同步系统时间来修复它

这只适用于根服务器。不在虚拟服务器上。 如果您租用vServer,请与您的服务器托管服务提供商联系。

我希望这会有所帮助:)

答案 1 :(得分:0)

不确定这是否有助于提供任何线索。

我最近修复了类似错误消息的问题(也包含“invalid_grant”)。我的情况是由于OAuth2凭据中缺少refresh_token值导致凭据刷新失败。所以我的修复是从谷歌获得新的刷新令牌。事实证明谷歌只在用户第一次使用谷歌授权时分发刷新。除非用户断开应用程序并重新授权。或者在应用程序中,flow.params['approval_prompt'] = 'force'已设置(通常用于本地调试)。

我的案例是关于Web应用程序和OAuth2授权的凭据。你看起来像一个服务帐户,所以我不确定你的问题是否也是一个刷新问题。