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

Google Java OAuth2.0首次代码交换流程中无法获取Refresh Token

解决Google OAuth2.0无法获取Refresh Token的问题

我之前也踩过这个一模一样的坑!你已经配置了setAccessType("offline")和setApprovalPrompt("force")但还是拿不到Refresh Token,大概率是以下几个容易忽略的细节导致的,咱们一个个排查:

1. 先让用户撤销对应用的授权(最常见原因)

Google的OAuth2.0机制有个小坑:当用户已经授权过你的应用,哪怕你设置了approvalPrompt("force"),默认也不会重复返回Refresh Token。你得先让用户手动撤销授权,再重新走流程:

  • 让用户登录自己的Google账号,进入「安全」板块,找到「第三方应用访问权限」,定位到你的应用并撤销授权
  • 然后重新触发授权流程,这时候会重新弹出授权确认页面,走完流程后应该就能拿到Refresh Token了

2. 核对客户端凭证的配置细节

  • 检查你在Google Cloud Console创建的客户端ID类型:如果是Web应用,务必保证控制台里填写的redirect_uri和代码里clientSecrets.getDetails().getRedirectUris().get(0)完全一致——包括协议(http/https)、域名、端口,比如http://localhost:8080/callback不能少了端口号
  • 如果是桌面端或命令行工具,建议选「桌面应用」类型的客户端ID,这种类型的凭证更容易稳定获取到Refresh Token

3. 替换approvalPrompt为prompt参数(适配新版库)

有些新版本的Google API Java客户端库里,approvalPrompt参数已经被prompt替代了,你可以试试修改代码:

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(TRANSPORT, JSON_FACTORY, clientSecrets, ProjectsApi.SCOPES)
    .setAccessType("offline")
    .setPrompt("consent") // 替换原来的setApprovalPrompt("force")
    .build();

prompt("consent")会强制用户重新确认授权,确保返回Refresh Token

4. 检查Scopes是否配置正确

确认你用的ProjectsApi.SCOPES包含了所需的权限,要是用了自定义Scopes,得确保在OAuth consent screen里已经添加并完成验证

最后再测试一次

按照上面的步骤调整后,重新生成授权码(code),再执行你的token请求代码,应该就能拿到Refresh Token了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:13:21