错误:错误:1E08010C:DECODER 例程::Google 身份验证库不支持

Far*_*res 32 node.js google-cloud-storage google-api-nodejs-client

我最近在 Node.js 上使用 google 云存储 SDK 时遇到了这个错误。我知道这在过去没有任何改变的情况下是有效的,但我已经有一段时间没有接触代码了,可能是错误的。

这是错误本身:

Error: error:1E08010C:DECODER routines::unsupported
    at Sign.sign (node:internal/crypto/sig:131:29)
    at Object.sign (node_modules/jwa/index.js:152:45)
    at Object.jwsSign [as sign] (node_modules/jws/lib/sign-stream.js:32:24)
    at GoogleToken.requestToken (node_modules/gtoken/build/src/index.js:232:31)
    at GoogleToken.getTokenAsyncInner (node_modules/gtoken/build/src/index.js:166:21)
    at GoogleToken.getTokenAsync (node_modules/gtoken/build/src/index.js:145:55)
    at GoogleToken.getToken (node_modules/gtoken/build/src/index.js:97:21)
    at JWT.refreshTokenNoCache (node_modules/google-auth-library/build/src/auth/jwtclient.js:172:36)
    at JWT.refreshToken (node_modules/google-auth-library/build/src/auth/oauth2client.js:153:24)
    at JWT.getRequestMetadataAsync (node_modules/google-auth-library/build/src/auth/oauth2client.js:298:28) {
  library: 'DECODER routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_UNSUPPORTED'
}
Run Code Online (Sandbox Code Playgroud)

引发此错误的代码如下:

Error: error:1E08010C:DECODER routines::unsupported
    at Sign.sign (node:internal/crypto/sig:131:29)
    at Object.sign (node_modules/jwa/index.js:152:45)
    at Object.jwsSign [as sign] (node_modules/jws/lib/sign-stream.js:32:24)
    at GoogleToken.requestToken (node_modules/gtoken/build/src/index.js:232:31)
    at GoogleToken.getTokenAsyncInner (node_modules/gtoken/build/src/index.js:166:21)
    at GoogleToken.getTokenAsync (node_modules/gtoken/build/src/index.js:145:55)
    at GoogleToken.getToken (node_modules/gtoken/build/src/index.js:97:21)
    at JWT.refreshTokenNoCache (node_modules/google-auth-library/build/src/auth/jwtclient.js:172:36)
    at JWT.refreshToken (node_modules/google-auth-library/build/src/auth/oauth2client.js:153:24)
    at JWT.getRequestMetadataAsync (node_modules/google-auth-library/build/src/auth/oauth2client.js:298:28) {
  library: 'DECODER routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_UNSUPPORTED'
}
Run Code Online (Sandbox Code Playgroud)

包含process.env所有正确的值,我已确保尝试使用新的私钥但出现相同的错误。有人见过这个吗?

蒂亚!

小智 59

我遇到了同样的问题,并通过用换行符替换原始 \n 字符来修复它。也许您从环境中获取密钥作为原始数据,并且原始数据中的 \n 字符不被视为换行符。你可以试试这个:

    private_key: process.env.PRIVATE_KEY.split(String.raw`\n`).join('\n'),

Run Code Online (Sandbox Code Playgroud)

  • 或 `.replace(/\\n/g, '\n')` (8认同)
  • 在本地我能够正常使用 .env,但是当我部署到云运行时它失败了。这在本地和云运行中都对我有用,但为什么会发生这种情况?你能给我解释一下吗?我试图通过在控制台中打印它来看看它的作用,但我看不到区别 (3认同)

小智 25

作为社区维基来回答这个问题。正如约翰·汉利(John Hanley)在上面的评论中提到的

  1. 不要将服务帐户存储在环境变量中。
  2. 如果这样做,请勿将服务帐户分解。对整个服务帐户进行 Base64 编码,将其存储在变量中,然后在需要时进行 Base64 解码。
  3. 您的代码失败,因为正在使用错误的凭据设置客户端。最有可能的是私钥已损坏。

  • 信息丰富,但没有帮助 (17认同)

Sam*_*Sam 6

我认为您需要检查 .env 文件并确保私钥中没有添加任何额外字符,例如末尾的逗号“,”。这就是我收到此错误的原因。