如何通过REST API自动生成Google OAuth刷新令牌?是否需切换至服务账号?
解决Google OAuth
invalid_grant 错误与离线转化上传自动化方案 问题概述
通过两次REST API调用批量上传Google离线点击转化数据(一次生成Access Token,一次上传转化数据),原本运行正常,数周后生成Access Token时突然收到JSON格式的invalid_grant错误。未收到Google通知,且官方文档列出的Refresh Token过期原因均不匹配当前场景。已通过手动生成新Refresh Token解决问题,但需实现自动化处理或评估OAuth类型切换方案。
解决方案
1. 自动化处理invalid_grant(Web应用OAuth场景)
由于Refresh Token的生成必须经过用户授权流程,无法直接通过REST API自动生成,但可实现以下自动化流程:
- 在代码中捕获
invalid_grant响应 - 用无头浏览器模拟预配置的用户授权流程,获取新的Refresh Token
- 将新Token存储到安全配置位置,后续请求自动调用新Token
注意:需确保授权流程符合Google OAuth规范,避免触发安全拦截机制。
2. 切换至服务账号OAuth(推荐方案)
若你的场景是无用户交互的服务器端自动化任务,服务账号是更稳定的选择:
- 服务账号通过JSON密钥文件验证身份,无需依赖Refresh Token,不存在过期问题
- 可直接调用Google Ads API完成离线转化上传
- 配置步骤:
- 在Google Cloud控制台创建服务账号
- 在Google Ads账号中添加服务账号邮箱为授权用户,并分配对应权限
- 使用服务账号密钥文件生成Access Token,发起转化上传请求
补充说明
- 未匹配官方文档的
invalid_grant错误,可能是Google未明确列出的安全机制触发(如长期闲置的Refresh Token被回收、IP地址变更等) - 服务账号适合自动化后台任务,相比Web应用OAuth,无需维护Refresh Token的生命周期,稳定性更高
内容的提问来源于stack exchange,提问作者Volomike
相关产品推荐
相关产品推荐

