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

使用Google OAuth2.0获取Access Token和Refresh Token时遭遇Invalid_grant错误

Google OAuth2.0获取Access Token和Refresh Token时遭遇Invalid_grant错误

我最近在尝试通过Google OAuth2.0获取Access Token和Refresh Token时碰到了invalid_grant错误,下面我一步步说下我的操作流程,看看问题出在哪:

  • 步骤1:Google控制台配置完成
    我已经在Google开发者控制台里正确设置了项目和OAuth2.0凭据,包括重定向URI这些核心配置都确认没问题。

  • 步骤2:成功获取授权码
    我在浏览器里访问了以下授权URL(已补全个人客户端ID参数):

    https://accounts.google.com/o/oauth2/v2/auth?scope=https://mail.google.com/&access_type=offline&include_granted_scopes=true&response_type=code&state=state_parameter_passthrough_value&redirect_uri=http://localhost&client_id=【我的客户端ID】
    

    完成授权流程后,我成功拿到了授权码:4/0AcvDMrAjHZ9AeAhiQiE533rWoe6Hk4gmetvjfv-cY6nXMaaFB8BoVrxL-9-2ZLqjfMh50A

  • 步骤3:尝试兑换Token时触发错误
    接着我用curl发送请求,想把拿到的授权码换成Access Token和Refresh Token,请求内容大致如下:

    curl --location 'https://oauth2.googleapis.com/token' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'code=4/0AcvDMrAjHZ9AeAhiQiE533rWoe6Hk4gmetvjfv-cY6nXMaaFB8BoVrxL-9-2ZLqjfMh50A' \
    --data-urlencode 'client_id=【我的客户端ID】' \
    --data-urlencode 'client_secret=【我的客户端密钥】' \
    --data-urlencode 'redirect_uri=http://localhost' \
    --data-urlencode 'grant_type=authorization_code'
    

    但发送请求后,返回的结果却是invalid_grant错误。我完全是照着官方文档的步骤来操作的,实在搞不清楚哪里出了问题。


结合我之前踩过的坑,给你几个排查方向:

  1. 检查授权码是否有效
    Google的授权码是一次性的,而且有效期只有10分钟左右。如果你拿到授权码后隔了很久才发请求,或者之前已经用过这个码兑换过Token,都会触发invalid_grant。建议重新生成一个新的授权码,立刻发送兑换请求试试。

  2. 确认重定向URI完全一致
    控制台里配置的重定向URI必须和请求Token时redirect_uri参数完全匹配——包括协议(http/https)、端口、路径,哪怕是末尾多了个斜杠或者大小写不一致都会出错。你仔细核对下控制台里的配置是不是和请求里的http://localhost完全一样?

  3. 检查客户端ID和密钥是否正确
    别小看这个细节,很多时候都是复制时漏了字符或者选错了凭据类型。确认下curl请求里的client_id和client_secret是不是和Google控制台里生成的OAuth2.0凭据完全一致,有没有把服务端凭据当成客户端凭据用了?

  4. 确认离线访问权限是否生效
    你在授权请求里加了access_type=offline,这个是获取Refresh Token的必要参数,但要确保用户在授权时没有拒绝离线访问的权限(一般默认是允许的,但也可以去Google账号的授权记录里查一下)。

  5. 检查用户是否取消了授权
    如果用户在拿到授权码后,去Google账号的「安全」-「第三方应用访问」里取消了对你的应用的授权,那再用这个授权码请求Token也会失败。这种情况需要用户重新走一遍授权流程。

  6. 尝试在同一设备/IP下操作
    Google的安全机制有时候会检测到授权和兑换Token的设备或IP不一致,从而拒绝请求。你可以试试在同一个设备上重新完成授权和兑换操作,看看能不能解决问题。

备注:内容来源于stack exchange,提问作者satya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:59:36