尽管使用了刷新令牌,但 Google Ads API 仍显示“令牌已过期或撤销”

Posted

技术标签:

【中文标题】尽管使用了刷新令牌,但 Google Ads API 仍显示“令牌已过期或撤销”【英文标题】:Google Ads API says "Token has been expired or revoked" despite using a refresh token 【发布时间】:2021-02-10 14:34:34 【问题描述】:

我在这里根据本手册设置了整个 Google Ads API:https://developers.google.com/google-ads/api/docs/client-libs/python/oauth-desktop?hl=en

我获得了刷新令牌并将其放入我的 google-ads.yaml 文件中,该文件看起来完全像这样: https://github.com/googleads/google-ads-python/blob/master/google-ads.yaml。我还将我的 client_id、developer_token 和 client_secret 放在文件中的相应位置。

一切顺利,例如,我可以要求所有广告系列: https://developers.google.com/google-ads/api/docs/samples/get-campaigns#python。我也可以使用 API 的其他服务。

每次我使用 API 时,我都会使用以下代码通过客户端访问它:

from google.ads.google_ads.client import GoogleAdsClient
client = GoogleAdsClient.load_from_storage(path_to_google_ads_yaml_file)

正如我已经说过的那样,它有效。

几天后我再次尝试连接并收到以下错误:

 “error”: “invalid_grant”, “error_description”: “Token has been expired or revoked.”

所以我再次获得了一个新的刷新令牌 (https://developers.google.com/google-ads/api/docs/client-libs/python/oauth-desktop?hl=en),这样一切都恢复了。

一天后我又遇到了同样的错误。所以我的问题是:刷新令牌的目的是什么?我认为它允许我访问 API 而无需请求新令牌或刷新令牌!?

现在,我再次尝试连接到 API(尽管上次没有工作),但现在我遇到了一个更糟糕的新错误:

'invalid_grant: Bad Request', '\n  "error": "invalid_grant",\n  "error_description": "Bad Request"\n'

所以事情变得更加复杂......

【问题讨论】:

我遇到了同样的问题,即使我已经刷新了令牌,但现在不起作用。它之前是工作文件 面临同样的问题并回答了我自己的问题:***.com/questions/66240374/… 【参考方案1】:

正如@fatima Ajij 指出的那样,整个问题/问题在于设置: 看看他的回答: Token has expired or revoked - Google Ads 非常感谢,法蒂玛·阿吉!

【讨论】:

应用程序不需要被“发布”以保持刷新令牌。处于“测试”模式的应用程序的行为应与“生产”应用程序相同(用户数量有限除外)。 如果这个解决方案是真的,这肯定是谷歌需要修复的错误?

以上是关于尽管使用了刷新令牌,但 Google Ads API 仍显示“令牌已过期或撤销”的主要内容,如果未能解决你的问题,请参考以下文章

谷歌刷新令牌终身

google oauth2 刷新令牌何时过期?

关于google API中访问令牌和刷新令牌的问题

了解 Google OAuth2 刷新令牌

Google 令牌刷新返回“令牌已过期或撤销”。

如果颁发了新的刷新令牌,旧的刷新令牌是不是仍然有效?