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
中包含什么,但在这种情况下,这是附加到绝对路径末尾的内容。
在不知道您的项目结构或您指向的内容的情况下,实际上不可能说出您的项目中什么是有效路径,什么不是有效路径。
keyFile
是google.auth
下对象中的一个键(用{key:value}格式表示)。如您引用的示例代码所示,该脚本正在使用 google.auth 库并调用一个方法来构造和对象所提供的信息,以便它为您抽象出身份验证过程的其他元素。您向它提供了两条信息:1) 可能是凭据的 keyFile 的位置和 2) 您允许的范围或权限集。在示例中,它是对 Drive 的只读访问。
编辑:调用服务用于签署 JWT 的私钥文件。
我在这里找到了文档:
https://googleapis.dev/nodejs/google-auth-library/5.10.1/classes/JWT.html
如果您不想包含文件,您可以在请求授权时使用key
、keyId
和email
提交凭据。
目标
将 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
中包含什么,但在这种情况下,这是附加到绝对路径末尾的内容。
在不知道您的项目结构或您指向的内容的情况下,实际上不可能说出您的项目中什么是有效路径,什么不是有效路径。
keyFile
是google.auth
下对象中的一个键(用{key:value}格式表示)。如您引用的示例代码所示,该脚本正在使用 google.auth 库并调用一个方法来构造和对象所提供的信息,以便它为您抽象出身份验证过程的其他元素。您向它提供了两条信息:1) 可能是凭据的 keyFile 的位置和 2) 您允许的范围或权限集。在示例中,它是对 Drive 的只读访问。
编辑:调用服务用于签署 JWT 的私钥文件。
我在这里找到了文档:
https://googleapis.dev/nodejs/google-auth-library/5.10.1/classes/JWT.html
如果您不想包含文件,您可以在请求授权时使用key
、keyId
和email
提交凭据。