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

Java操作Google Sheet时遇AuthenticationException认证错误排查

认证异常的根本原因与解决方案

抛出com.google.gdata.util.AuthenticationException: Error authenticating (check service name)的核心原因是使用的技术栈本身已被Google彻底淘汰,并非代码逻辑书写错误:

  • 这套代码基于已在2017年全量下线的GData Sheets API,配套的setUserCredentials(账号, 密码)认证方法,Google自2015年起就关闭了对普通Gmail账号的支持:
    • 当前Google账号后台已移除“允许低安全权限应用通过明文密码直接登录”的配置项,就算输入的账号密码完全正确,服务端也会直接拒绝认证请求
    • 开启两步验证的Gmail账号,会默认拦截所有基于普通账号密码的第三方登录尝试
  • 参考教程发布于2014年,对应的认证规则、API接口现已全部失效,无论怎么调整SpreadsheetService的配置参数,都无法通过现有认证流程。

更简便的Google Sheet数据写入替代方案

当前Google官方主推Sheets API v4版本,配套服务账号认证模式,无需硬编码用户密码,代码量更少、稳定性更高,实现路径如下:

  • 前置准备:
    • 在Google Cloud控制台开通Sheets API能力,创建服务账号,下载JSON格式的密钥文件
    • 将需要写入数据的Google Sheet文档,添加服务账号邮箱为协作者,并授予编辑权限
  • 依赖引入:直接使用官方提供的Sheets Java客户端依赖,无需手动处理老版本的Feed查询、工作表匹配、行对象构建等逻辑
  • 核心写入逻辑:
    原代码中数十行的查找表格、匹配工作表、构造行数据、插入记录的流程,现在仅需调用客户端自带的追加接口即可完成写入,核心逻辑参考:
    // 基于服务账号凭证构建Sheets服务实例
    Sheets sheetsService = new Sheets.Builder(
        GoogleNetHttpTransport.newTrustedTransport(),
        JacksonFactory.getDefaultInstance(),
        getCredentialsFromJsonKeyFile()
    ).setApplicationName("自定义应用名").build();
    
    // 向指定工作表的范围追加写入数据
    ValueRange appendBody = new ValueRange()
        .setValues(Collections.singletonList(Collections.singletonList("Nikhil")));
    sheetsService.spreadsheets().values()
        .append("目标表格ID", "Sheet1!A:A", appendBody)
        .setValueInputOption("USER_ENTERED")
        .execute();
    
  • 注意事项:
    • 不要再引入GData API的相关依赖,这套接口的后续维护已完全停止
    • 必须给服务账号授予对应表格的编辑权限,否则会抛出无权限访问的异常
    • 服务账号的密钥文件需做好本地安全存储,不要硬编码到公开代码仓库中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 05:54:08