Java调用Gmail API遇invalid_grant错误,新OAuth2客户端ID仍无效
解决Gmail API调用时的invalid_grant错误
排查及修复步骤
清除本地令牌缓存
Google API Java客户端通常会将令牌缓存到本地(比如项目目录下的.credentials文件夹),即使新建了客户端ID,旧的过期/撤销令牌仍会被读取。直接删除缓存文件,让程序重新触发OAuth授权流程。核对OAuth客户端ID类型
本地Java程序必须使用桌面应用类型的客户端ID,不能选用Web应用、安卓或iOS类型。类型不匹配会导致授权流程异常,触发invalid_grant错误。确认同意屏幕配置
若同意屏幕设为“外部”且未发布,只能使用添加的测试账户进行授权。确保你用来授权的Gmail账户在测试账户列表中,否则会因权限限制导致令牌无效。检查重定向URI一致性
Java桌面应用默认重定向URI为http://localhost:8888/Callback,Postman测试时要保证该URI与Google Cloud控制台中客户端ID配置的完全一致。自定义重定向URI的话,必须提前在控制台添加对应条目,否则授权后会返回400错误。同步系统时间
OAuth令牌验证依赖系统时间,若本地时间与标准时间偏差超过5分钟,会被判定为令牌过期。将系统时间同步至NTP服务器后重试。Postman测试的正确流程
获取访问令牌时需注意:- 授权类型选择“Authorization Code”
- 准确填写客户端ID、客户端密钥
- 范围包含Gmail API所需权限(如
https://www.googleapis.com/auth/gmail.readonly) - 重定向URI与控制台配置一致
授权码只能使用一次,需重新生成新的授权码再请求令牌,不要复用旧码。
内容的提问来源于stack exchange,提问作者Kiran S
相关产品推荐
相关产品推荐

