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

如何在Spring Boot服务器上验证Gmail API令牌?

解决Gmail API服务器部署时的OAuth验证问题

针对你部署服务器后无法完成Gmail OAuth验证的问题,给你几个可行的解决方案:

方案一:本地生成令牌后上传到服务器

你当前用的AuthorizationCodeInstalledApp是谷歌为桌面/本地应用设计的验证流程,直接在本地跑一次程序完成验证,再把生成的令牌文件传到服务器即可:

  • 在本地启动你的Spring Boot应用,按照提示打开链接完成OAuth验证,此时本地会生成tokens文件夹
  • 将整个tokens文件夹上传到服务器上应用的运行目录(要和代码里Paths.get("tokens")指定的路径一致)
  • 服务器启动应用时,会自动读取已有的令牌,无需再触发验证流程

方案二:改用授权码手动输入模式

修改验证代码,替换本地服务器接收器为手动输入授权码的模式,这样可以在本地浏览器完成授权后,把授权码复制到服务器终端:
修改后的getCredentials方法代码:

private static Credential getCredentials(final NetHttpTransport httpTransport, GsonFactory jsonFactory)
        throws IOException {

    InputStream inputStream = MailService.class.getResourceAsStream("/gmail.json");
    if (inputStream == null) {
        logger.error("Unable to load Gmail credentials file.");
        return null;
    }
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory, new InputStreamReader(inputStream));

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            httpTransport, jsonFactory, clientSecrets, Set.of(GMAIL_SEND))
            .setDataStoreFactory(new FileDataStoreFactory(Paths.get("tokens").toFile()))
            .setAccessType("offline")
            .build();

    // 替换LocalServerReceiver为PromptReceiver,实现手动输入授权码
    return new AuthorizationCodeInstalledApp(flow, new PromptReceiver()).authorize("user");
}

启动服务器应用后,控制台会输出授权链接和提示输入授权码:

  1. 在本地浏览器打开该链接,登录谷歌账号完成授权
  2. 复制页面上显示的授权码,粘贴到服务器终端中
  3. 程序会自动生成令牌文件,后续启动无需再验证

方案三:修正OAuth客户端配置(配合方案二使用)

如果你要使用服务器地址作为重定向URI,需要确保两步配置正确:

  • 在谷歌云控制台的OAuth客户端设置中,将http://sva-doppelturnier.de:8888添加到已授权的重定向URI列表
  • 确保你的OAuth客户端类型是「Web应用」,而非「桌面应用」(桌面应用不支持自定义服务器重定向URI)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:07:47