目标
使用带有firebase函数的googleapi。获取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-服务认证
我在这里找到了文档:
https://googleapis.dev/nodejs/google-auth-library/5.10.1/classes/JWT.html
如果不希望包含文件,则可以在请求授权时使用key
、keyId
和email
提交凭据。
您似乎对它的工作原理有很多疑问。我强烈鼓励你阅读谷歌认证的基本知识。
JWT是JSON Web令牌的缩写。它是一个标准标准,定义了以JSON格式在各方之间传输信息的安全方式。在您的代码中,"jwt"是一个包含keys属性的类。这里有很多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(您允许的范围或权限集。在该示例中,它是对驱动器的只读访问。
EDIT:调用服务用来对JWT进行签名的私钥文件。