You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Ads API授权报错:google.auth.exceptions.RefreshError: Invalid Client

我正在开发一个项目,流程是让客户授权其Google Ads账户,之后用授权凭证代客户下载数据。目前Web应用已完成授权流程,通过授权码兑换到了access token和refresh token,将refresh token存入数据库后,由另一个应用尝试调用Google Ads API。

按照Google OAuth机制,理论上仅需refresh token即可完成授权,但使用GoogleAdsClient类的load_from_dict()或load_from_env()方法时,始终抛出相同错误:

google.auth.exceptions.RefreshError: ('invalid_client: Unauthorized', {'error': 'invalid_client', 'error_description': 'Unauthorized'})

我已经验证了developer_token、client_id、client_secret均与API控制台信息完全一致,且refresh_token已正确传入凭证字典。查阅大量相关资料后仍无法解决问题。

相关代码:

class GoogleAds:

    def __init__(self):
        self.scope = ['https://www.googleapis.com/auth/adwords']
        self.client_id = os.getenv('GOOGLE_ADS_CLIENT_ID')
        self.client_secret = os.getenv('GOOGLE_ADS_CLIENT_SECRET')
        self.developer_token = os.getenv('GOOGLE_ADS_DEVELOPER_TOKEN')
        self.refresh_token = os.getenv('GOOGLE_ADS_REFRESH_TOKEN')

    def authorize(self):
        credentials = {
            "developer_token": self.developer_token,
            "refresh_token": self.refresh_token,
            "client_id": self.client_id,
            "client_secret": self.client_secret,
            "use_proto_plus":"True",
            "grant_type": "refresh_token",
        }
        print(credentials)

        googleads_client = GoogleAdsClient.load_from_dict(credentials)

        service = googleads_client.get_service("GoogleAdsService")
        request = googleads_client.get_type("SearchGoogleAdsRequest")

        return service, request

排查建议

  • 核对OAuth客户端类型:生成refresh token时使用的客户端类型(如Web应用、桌面应用)必须与当前调用API的客户端ID类型完全一致,类型不匹配会直接触发invalid_client错误。
  • 验证refresh token有效性:尝试通过新的授权流程生成全新的refresh token进行测试,排查原token是否因用户重新授权、密码变更或客户端密钥重置而失效。
  • 确认环境变量加载正确性:直接打印self.client_id、self.client_secret等变量的实际值,排查是否存在环境变量未加载、值包含多余空格或转义字符的问题。
  • 检查API启用与权限:确认Google Ads API已在API控制台中启用,且developer_token对应的账号拥有标准访问权限(测试权限无法调用正式API)。
  • 移除冗余参数:删除credentials字典中的grant_type: "refresh_token"参数,GoogleAdsClient会自动处理OAuth刷新流程,该参数属于冗余配置。

内容的提问来源于stack exchange,提问作者Garrett Berg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:01:14