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

Google OAuth请求返回invalid_grant授权错误问题排查咨询

问题概述

应用配置access_type=offline类型OAuth令牌后,全部API查询因授权失败中断。向Google OAuth令牌端点发起的POST请求如下:

POST https://oauth2.googleapis.com/token

请求返回400 Bad Request,响应内容:

{ "error": "invalid_grant", "error_description": "Bad Request" }

业务侧通过官方PHP版Google Ads API客户端库发起所有API查询,核心实现代码:

// 生成支持刷新的OAuth2鉴权凭证
$oAuth2Credential = (new OAuth2TokenBuilder())->fromFile($filePathName)->build();
$loggerFactory    = new LoggerFactory();
$logger           = $loggerFactory->createLogger('TestChannel',
    APPLICATION_DIRECTORY . ".log/google/adsapi.date("Y-m").".log",
    'DEBUG');

// 基于配置文件与上述OAuth2凭证初始化Google Ads客户端
$googleAdsClient = (new GoogleAdsClientBuilder())
    ->fromFile(std::lpath($filePathName))
    ->withOAuth2Credential($oAuth2Credential)
    ->withLogger($logger)
    ->build();
$query = "SELECT customer_client.status FROM customer_client";
$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
$response               = $googleAdsServiceClient->search(
    $customerId,
    $query,
    ['pageSize' => self::PAGE_SIZE]
);
return $response->getIterator()->current();

当前应用在Google Cloud Console已处于生产发布状态,已完成的排查操作:

  • 重置对应账号的登录密码
  • 重置客户端密钥并生成全新的refresh token
    明确不采用新建应用的方案:新应用无法快速提升API配额上限,当前业务只能依托已有基础配额的现有应用运行。
    补充排查结果:Google账号权限管理页面中已不存在当前应用的授权关联记录,正常授权关联效果参考:
    正常授权关联效果参考

解决方案

一、invalid_grant错误修复步骤

核心诱因是账号侧已经移除应用授权,旧refresh token全部失效,按以下流程重新授权即可恢复:

  1. 修改OAuth授权请求参数,必须显式携带access_type=offline、prompt=consent两个参数。缺少prompt=consent时,即使账号侧已删除授权记录,授权流程也会静默跳过权限确认页,无法生成有效的长效refresh token,仍然会报invalid_grant。
  2. 构造完整的OAuth授权链接,使用拥有目标Google Ads账号操作权限的账号手动访问链接,走完完整授权流程,授权时必须勾选所有请求的权限选项,不要跳过步骤。
  3. 授权完成后拿到的authorization code有效期仅10分钟、且只能使用一次,需要立即调用令牌端点换取新的access token和refresh token,超时或重复使用code都会触发invalid_grant报错。
  4. 将新获取的refresh token更新到SDK配置文件中,覆盖旧值,重启业务服务后重新发起请求测试。

其他触发invalid_grant的常见排查点:

  • 校验服务运行服务器的系统时间,若与NTP标准时间偏差超过5分钟,会导致签名校验失败触发该错误,同步系统时间即可修复。
  • 确认调用令牌接口时传入的client_id、client_secret与签发refresh token使用的凭证完全一致,重置客户端密钥后,旧密钥签发的所有refresh token会直接失效。
  • 确认使用的授权账号仍拥有目标Google Ads账号的对应操作权限,账号被移除权限、被封禁都会导致refresh token失效。
  • 确认请求的OAuth scope与Google Ads API要求的范围完全匹配,漏加、错加scope都会导致授权无效。

二、Google OAuth官方支持反馈渠道

  • 使用绑定项目的Google Cloud账号登录Cloud支持中心,根据账号当前持有的支持套餐选择对应工单入口,问题分类选择「OAuth授权相关」,提交时附带报错时间、完整请求响应报文、客户端ID信息即可,不要提交密钥类敏感信息。
  • 无付费支持套餐的情况下,可在Google Ads API官方社区提交问题,附带已做的排查操作、报错详情、参数配置信息,官方值守人员会在工作日回复。
  • 本次遇到的授权记录丢失问题属于常规授权失效场景,按上述重新授权流程即可恢复,无需联系官方人工介入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:18:23