Google Identity API兑换授权码返回Invalid grant 400错误如何解决?
错误根因说明
你收到的Invalid grant错误是OAuth 2.0授权码兑换令牌阶段的典型报错,核心原因是请求中涉及授权校验的参数不符合Google Identity服务的校验规则,可按照以下优先级逐一排查:
排查方案
- 授权码失效问题
Google OAuth 2.0返回的授权码仅10分钟有效期,且只能使用一次,哪怕前一次兑换请求失败,该授权码也会被立即作废。你需要重新走前序授权流程,获取全新的授权码后再提交兑换请求。 - 重定向URI不匹配
兑换token时提交的redirect_uri参数,必须和你申请授权码时传入的redirect_uri完全一致,包括协议类型(http/https)、端口号、路径、末尾斜杠,哪怕存在单个字符的差异都会触发校验失败。如果是本地测试使用的非线上URI,需要确保两次请求填写的内容完全相同。 - 客户端凭证不匹配
检查请求中的client_id和client_secret,必须和你在Google Cloud控制台创建的OAuth客户端凭证完全一致,同时注意不要混用不同应用类型的凭证,Web应用、桌面应用、移动应用的凭证不通用。 - 请求格式错误
该接口要求请求的Content-Type必须为application/x-www-form-urlencoded,所有参数必须以表单格式放在请求体中提交,不支持JSON格式传参,也不支持将参数放在URL查询串中。请求必填参数如下:grant_type:固定值authorization_codecode:你获取的授权码client_id:你的OAuth客户端IDclient_secret:你的OAuth客户端密钥redirect_uri:和授权阶段一致的重定向地址
- 项目权限限制问题
如果你的Google Cloud项目还处于测试状态,当前授权的谷歌账号必须被提前添加到项目的测试用户白名单中,否则兑换阶段也会触发该错误。另外需要确认你的Google Cloud项目状态正常,没有欠费、OAuth服务被限制的问题。
快速校验方法
你可以拿到新的授权码后,直接执行以下curl命令验证,排除Postman配置错误:
curl -d "client_id=替换为你的client_id" \ -d "client_secret=替换为你的client_secret" \ -d "code=替换为新获取的授权码" \ -d "grant_type=authorization_code" \ -d "redirect_uri=替换为授权时使用的redirect_uri" \ https://oauth2.googleapis.com/token
内容的提问来源于stack exchange,提问作者KHOUIEL Salah
相关产品推荐
相关产品推荐

