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

如何通过code获取Google API refresh_token?请求返回invalid_grant错误

问题分析与解决方法

常见错误原因

  • 授权码code失效:Google OAuth的授权码仅能使用一次,且有效期仅约10分钟,重复使用或超时都会触发invalid_grant错误。
  • redirect_uri不匹配:请求中的redirect_uri必须与获取授权码时使用的地址完全一致,包括协议(http/https)、域名、路径,任何细微差异都会导致验证失败。
  • 客户端凭证错误:client_id或client_secret与Google Cloud控制台中创建的OAuth客户端凭证不一致,比如拼写错误、截断或复制不全。
  • 未请求离线访问权限:若要获取refresh_token,必须在用户授权阶段的请求中包含offline_access权限范围,否则Google不会返回refresh_token,甚至会导致授权码无效。
  • 权限配置问题:OAuth consent screen未添加测试用户(测试环境下)、客户端被封禁,或账号无权限使用该客户端,也可能引发此错误。

正确获取refresh_token的步骤

  1. 获取授权码时包含offline_access范围
    发起用户授权请求时,必须在scope参数中加入offline_access,示例授权URL:

    https://accounts.google.com/o/oauth2/v2/auth?client_id=你的客户端ID&redirect_uri=你的回调地址&response_type=code&scope=openid%20email%20profile%20offline_access
    

    用户完成授权后,会跳转到redirect_uri并携带有效的授权码code。

  2. 用未使用过的有效code发起token请求
    确保code是刚获取且未使用过的,执行以下curl命令(替换所有占位符为真实值):

    curl --request POST \
      --data "code=刚获取的授权码&client_id=你的客户端ID&client_secret=你的客户端密钥&redirect_uri=你的回调地址&grant_type=authorization_code" \
      https://accounts.google.com/o/oauth2/token
    
  3. 验证参数一致性

    • 确认redirect_uri与授权请求中的地址完全一致,不能有任何修改。
    • 核对client_id和client_secret,确保与Google Cloud控制台中的凭证完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:05:19