node.js - 错误 : 16 UNAUTHENTICATED: Request had invalid authentication credentials. 预期的 OAuth 2 访问 token 、登录 cookie 或其他有效的身份验证凭据

标签 node.js google-secret-manager

我使用 Google Secret Manager 的 Node.js 代码停止工作(前一段时间工作正常)。我已将 GOOGLE_APPLICATION_CREDENTIALS env 变量设置为有效路径和 console.log(process.env.GOOGLE_APPLICATION_CREDENTIALS);打印正确。 我什至尝试重新生成新的 .json 文件,但仍然出现相同的错误。最初它没有 keyFilename,但两者都给出相同的结果,即错误。 key 在管理网站中启用。 我也尝试调用 await client.initialize();

有没有更多的调试方法?最近从冬令时到夏令时的变化会产生影响吗?但为什么重新生成的 key 不起作用?

const { SecretManagerServiceClient } = require('@google-cloud/secret-manager');
const client = new SecretManagerServiceClient({
  keyFilename: 'path-to.json'
});

const projectId = 'project-number';
const parent = 'projects/' + projectId;

...
async function listSecrets() { // Calling this throws the error
  const [secrets] = await client.listSecrets({
    parent: parent
  });

完整的错误堆栈:

[2021-04-12T09:14:56.366Z] (node:51988) UnhandledPromiseRejectionWarning: Error: 16 UNAUTHENTICATED: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.
    at Object.callErrorFromStatus (<super-secret-path>\node_modules\@grpc\grpc-js\build\src\call.js:31:26)
    at Object.onReceiveStatus (<super-secret-path>\node_modules\@grpc\grpc-js\build\src\client.js:176:52)
    at Object.onReceiveStatus (<super-secret-path>\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:336:141)
    at Object.onReceiveStatus (<super-secret-path>\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:299:181)
    at <super-secret-path>\node_modules\@grpc\grpc-js\build\src\call-stream.js:130:78
    at processTicksAndRejections (internal/process/task_queues.js:75:11)

最佳答案

我已经安装了 Google Cloud SDK,在我的服务器上运行了 gcloud auth activate-service-account,它被触发了

ERROR: (gcloud.auth.activate-service-account) There was a problem refreshing your current auth tokens: ('invalid_grant: Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values in the JWT claim.', '{"error":"invalid_grant","error_description":"Invalid JWT: Token must be a short-lived token (60 minutes) and in a reasonable timeframe. Check your iat and exp values in the JWT claim."}')

在进一步谷歌搜索之后,这让我检查了我的服务器时间,现在已经晚了 2 小时,因为最近从冬季到夏季发生了变化,我想在晚 1 小时之前仍然合适。 调整时间解决了问题。(http://time.is 有帮助)

有趣的是,我可以使用“人类”凭据登录。

关于node.js - 错误 : 16 UNAUTHENTICATED: Request had invalid authentication credentials. 预期的 OAuth 2 访问 token 、登录 cookie 或其他有效的身份验证凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67055558/

相关文章:

windows - NodeJS - 请求提升权限 (WIN/OSX)

google-cloud-functions - 将 Google Secret Manager 与 Firebase Functions 和 Stripe 结合使用(顶级)

kubernetes - 使用 kustomize 直接从 gcloud secrets manager 中查找 secret 作为 secretGenerator

google-cloud-platform - 有没有办法在 GCP 中存储 secret ,类似于 Azure 保管库?

node.js - 如何在 Node js 中创建和保存过期的用户 token ?

node.js:使用用户输入作为命令行参数是否安全?

node.js - 我如何验证用户的输入?

docker - 在 Google Build 执行构建期间将 Google Cloud 凭据传递到 Docker 容器?

github-actions - 关于将工作负载_身份提供者保留为 secret 的问题

javascript - 从服务器端还是客户端获取?