google.auth.GoogleAuth() 需要什么 keyFile 密钥?

What keyFile key does google.auth.GoogleAuth() need?

目标

将 googleapis 与 firebase 函数结合使用。获取 JWT 令牌,以便 firebase 函数可以使用具有域范围委托的服务帐户来授权目录和驱动器等 G Suite API。

问题

path.join();

中的内容

什么是 __dirname 什么是'jwt.keys.json'?

来自这个例子: https://github.com/googleapis/google-api-nodejs-client/blob/master/samples/jwt.js

  // Create a new JWT client using the key file downloaded from the Google Developer Console
  const auth = new google.auth.GoogleAuth({
    keyFile: path.join(__dirname, 'jwt.keys.json'), // <---- WHAT GOES IN path.join()
    scopes: 'https://www.googleapis.com/auth/drive.readonly',
  });

错误

当我运行

  const auth = new google.auth.GoogleAuth({
    keyFile: path.join(__dirname, "TEST"), // <-- __dirname == /srv/ at runtime
    scopes: 'https://www.googleapis.com/auth/drive.readonly',
  });

从 GCP 日志我得到这个错误:

Error: ENOENT: no such file or directory, open '/srv/TEST'

显然 TEST 无效,但 '/srv/ 有效吗?

什么是keyFile,一个文件路径?凭据?

另一个例子

https://github.com/googleapis/google-api-nodejs-client#service-to-service-authentication

您似乎对它的工作原理有很多疑问。我强烈建议您阅读 Google authentication.

的基础知识

JWT 是 JSON Web Token 的缩写。它是定义以 JSON 格式在各方之间传输信息的安全方式的标准。在您的代码中 "jwt" 是一个包含键 属性 的 class。有大量的 JWT 库。有一些流行的包使用 Node/Express 框架。

__dirname // In Node this is the absolute path of the directory containing the currently executing file.

path.join是一种将不同路径段连接成一条路径的方法。

此处您采用的是绝对路径并将一些信息连接到路径的末尾。我不确定 jwt.keys.json 中包含什么,但在这种情况下,这是附加到绝对路径末尾的内容。

在不知道您的项目结构或您指向的内容的情况下,实际上不可能说出您的项目中什么是有效路径,什么不是有效路径。

keyFilegoogle.auth下对象中的一个键(用{key:value}格式表示)。如您引用的示例代码所示,该脚本正在使用 google.auth 库并调用一个方法来构造和对象所提供的信息,以便它为您抽象出身份验证过程的其他元素。您向它提供了两条信息:1) 可能是凭据的 keyFile 的位置和 2) 您允许的范围或权限集。在示例中,它是对 Drive 的只读访问。

编辑:调用服务用于签署 JWT 的私钥文件。

我在这里找到了文档:

https://googleapis.dev/nodejs/google-auth-library/5.10.1/classes/JWT.html

如果您不想包含文件,您可以在请求授权时使用keykeyIdemail提交凭据。