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

Node.js调用Google Sheets API遇error:1E08010C解码错误求助

解决Node.js连接Google Sheets时的error:1E08010C:DECODER routines::unsupported错误

错误原因分析

这个错误通常和私钥格式问题或Node.js 17+版本使用的OpenSSL 3.0兼容性有关——OpenSSL 3.0对部分旧签名算法或非标准格式的私钥支持有限。

解决方案

1. 检查并修正私钥格式

确保strava-test-credentials.json中的key字段是标准PEM格式:

  • 必须包含完整的-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----头/尾
  • 私钥内容的换行符必须正确(不要全部挤成一行)

如果格式有问题,建议将私钥单独保存为private-key.pem文件,通过文件读取使用:

const { google } = require("googleapis");
const fs = require('fs');
const keys = require("./strava-test-credentials.json");

const privateKey = fs.readFileSync('./private-key.pem', 'utf8');
const client = new google.auth.JWT(keys.web.client_email, null, privateKey, [
  "https://www.googleapis.com/auth/spreadsheets",
]);

client.authorize(function (err, tokens) {
  if (err) {
    console.error('授权失败:', err);
    return;
  }
  gsrun(client);
});

async function gsrun(cl) {
  const gsapi = google.sheets({ version: "v4", auth: cl });

  const opt = {
    spreadsheetId: "1G8W0h8axQLWt-2UmABL72j4y1et3vCB6BpQvg1OUTe0",
    range: "Data!A1:B5",
  };

  try {
    let data = await gsapi.spreadsheets.values.get(opt);
    console.log(data.data.values);
  } catch (err) {
    console.error('获取数据失败:', err);
  }
}

2. 启用OpenSSL兼容模式

Node.js 17+默认使用OpenSSL 3.0,部分旧算法被禁用,启动时添加兼容参数:

  • Linux/Mac:
    NODE_OPTIONS=--openssl-legacy-provider node your-script.js
    
  • Windows命令行:
    set NODE_OPTIONS=--openssl-legacy-provider
    node your-script.js
    
  • Windows PowerShell:
    $env:NODE_OPTIONS="--openssl-legacy-provider"
    node your-script.js
    

3. 更新依赖包版本

旧版本的Google认证库可能和Node.js 21不兼容,更新到最新版:

npm install googleapis@latest google-auth-library@latest

4. 验证服务账号权限

确认服务账号(client_email对应的邮箱)已被添加到目标Google Sheets的共享列表,且拥有编辑权限(仅查看权限可能导致后续更新失败)。


原问题代码

const { google } = require("googleapis");
const keys = require("./strava-test-credentials.json");

const client = new google.auth.JWT(keys.web.client_email, null, keys.web.key, [
  "https://www.googleapis.com/auth/spreadsheets",
]);

client.authorize(function (err, tokens) {
  gsrun(client);
});
async function gsrun(cl) {
  const gsapi = google.sheets({ version: "v4", auth: cl });

  const opt = {
    spreadsheetId: "1G8W0h8axQLWt-2UmABL72j4y1et3vCB6BpQvg1OUTe0",
    range: "Data!A1:B5",
  };

  let data = await gsapi.spreadsheets.values.get(opt);
  console.log(data.data.values);
}

原错误栈信息

(node:9692) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
node:internal/crypto/sig:128
  const ret = this[kHandle].sign(data, format, type, passphrase, rsaPadding,
                            ^

Error: error:1E08010C:DECODER routines::unsupported
    at Sign.sign (node:internal/crypto/sig:128:29)
    at Object.sign (C:\Users\user\strava-api\node_modules\gtoken\node_modules\jwa\index.js:152:45)
    at Object.jwsSign [as sign] (C:\Users\user\strava-api\node_modules\gtoken\node_modules\jws\lib\sign-stream.js:32:24)
    at GoogleToken.requestToken (C:\Users\user\strava-api\node_modules\gtoken\build\src\index.js:224:31)
    at GoogleToken.getTokenAsyncInner (C:\Users\user\strava-api\node_modules\gtoken\build\src\index.js:158:21)
    at GoogleToken.getTokenAsync (C:\Users\user\strava-api\node_modules\gtoken\build\src\index.js:137:55)
    at GoogleToken.getToken (C:\Users\user\strava-api\node_modules\gtoken\build\src\index.js:96:21)
    at JWT.refreshTokenNoCache (C:\Users\user\strava-api\node_modules\google-auth-library\build\src\auth\jwtclient.js:165:36)
    at JWT.refreshToken (C:\Users\user\strava-api\node_modules\google-auth-library\build\src\auth\oauth2client.js:150:24)
    at JWT.getRequestMetadataAsync (C:\Users\user\strava-api\node_modules\google-auth-library\build\src\auth\oauth2client.js:295:28) {       
  library: 'DECODER routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_UNSUPPORTED'
}

Node.js v21.6.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:15:58