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

使用googleapis库调用Google API认证失败,报TypeError: Bad input string

解决googleapis认证时的TypeError: Bad input string问题

我之前也踩过这个坑!这个错误大概率和你的服务账号密钥文件处理、格式或者认证参数传递有关,咱们一步步来排查解决:

1. 先检查密钥文件的读取方式

很多时候问题出在读取JSON文件时没指定编码,导致拿到的是Buffer而不是字符串,传给googleapis就会触发这个错误。比如在Node.js环境下:

  • 错误示例(拿到Buffer):
const fs = require('fs');
const key = fs.readFileSync('./service-account-key.json'); // 没指定编码,返回Buffer
  • 正确示例(获取UTF-8字符串):
const fs = require('fs');
const key = fs.readFileSync('./service-account-key.json', 'utf8'); // 指定编码为utf8

更稳妥的方式是直接用require加载JSON,它会自动解析成对象:

const key = require('./service-account-key.json');

2. 验证JSON密钥文件的合法性

有时候导出的JSON文件可能因为下载中断、手动修改导致语法错误(比如漏了逗号、引号不匹配)。你可以先在代码里做个简单的校验:

const fs = require('fs');
try {
  const keyContent = fs.readFileSync('./service-account-key.json', 'utf8');
  JSON.parse(keyContent); // 测试JSON格式是否合法
  console.log('JSON格式没问题');
} catch (err) {
  console.error('JSON文件格式错误:', err.message);
}

如果这里报错,直接重新从Google API Console下载一份新的密钥文件就好。

3. 检查认证代码的参数传递

确保你给googleapis的认证参数类型正确,比如JWT认证的构造函数需要的是字符串或解析后的JSON对象,不是Buffer。举个正确的JWT初始化示例:

const { google } = require('googleapis');
const key = require('./service-account-key.json');

// 初始化JWT客户端
const jwtClient = new google.auth.JWT(
  key.client_email,
  null,
  key.private_key, // 这里必须是字符串,require加载的话会自动处理
  ['https://www.googleapis.com/auth/drive'], // 按需替换你的权限范围
  // 如果启用了域范围委派(DwD),这里填要模拟的用户邮箱;没启用的话直接删掉这个参数
  'user@yourdomain.com'
);

// 测试认证
jwtClient.authorize((err, tokens) => {
  if (err) {
    console.error('认证失败:', err);
    return;
  }
  console.log('认证成功:', tokens);
});

如果已经移除了DwD,一定要把最后那个模拟用户的参数删掉,避免多余参数导致异常。

4. 排查私钥格式问题

JSON里的private_key字段通常包含换行符(以-----BEGIN PRIVATE KEY-----开头,-----END PRIVATE KEY-----结尾),如果这个字段被手动修改过(比如换行符丢失、引号错误),也会触发这个错误。确保你没有修改过这个字段,直接用下载的原始内容。

如果以上步骤都试过还是不行,建议直接重新创建一个服务账号并下载新的密钥文件,有时候旧的账号配置可能有隐藏的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:29