调用Google Ads API遇RefreshError: unauthorized_client问题求助
针对你遇到的RefreshError: ('unauthorized_client')错误,结合已完成的配置步骤,可从以下核心方向排查解决:
1. 验证刷新令牌的授权范围
生成刷新令牌时,必须请求https://www.googleapis.com/auth/adwords这个核心权限范围。如果授权流程中未指定该范围,令牌会因权限不足触发unauthorized_client错误:
- 重新生成刷新令牌时,确保授权请求的scope包含上述链接
- 授权流程中需明确同意Google Ads API的访问权限
2. 确认OAuth授权流程与应用类型匹配
你创建的是Web应用,必须使用**授权码流程(Authorization Code Flow)**生成刷新令牌:
- 禁止使用隐式授权等其他流程,这类流程生成的令牌无法用于服务器端API调用
- 正确流程:先获取授权码,再用授权码+客户端密钥交换刷新令牌,而非直接通过客户端密钥生成令牌
3. 检查Google Ads账户关联与配置格式
- 开发者令牌对应的经理账户必须关联你当前操作的客户ID,否则无法通过权限校验
- 确认
google-ads.yaml中的客户ID格式为XXX-XXX-XXXX(带连字符),不能填写纯数字格式
4. 验证OAuth客户端的发布状态
在Google Cloud Console中:
- 如果OAuth客户端处于未发布状态,必须将你的邮箱添加到「测试用户」列表,否则非测试用户无法使用该应用
- 若已发布客户端,确保配置的重定向URI与生成刷新令牌时使用的完全一致
快速验证步骤(重新生成合规的刷新令牌)
使用以下代码生成正确的授权链接,重新获取刷新令牌:
from google_auth_oauthlib.flow import Flow # 替换为你的客户端密钥文件路径和配置的重定向URI flow = Flow.from_client_secrets_file( "client_secret.json", scopes=["https://www.googleapis.com/auth/adwords"], redirect_uri="https://your-redirect-uri.com/callback" ) # 生成授权链接,复制到浏览器完成授权 authorization_url, _ = flow.authorization_url(prompt="consent") print("授权链接:", authorization_url) # 授权后,将浏览器跳转的完整URL填入下方,交换刷新令牌 flow.fetch_token(authorization_response="浏览器跳转后的完整URL") print("新的刷新令牌:", flow.credentials.refresh_token)
将新生成的刷新令牌更新到google-ads.yaml中,重新运行测试代码即可。
内容的提问来源于stack exchange,提问作者Ankit Tripathi
相关产品推荐
相关产品推荐

