google-cloud-platform - GCP - 使用应用程序默认凭据的云功能域范围委派(无 -jwt)
问题描述
我正在尝试创建一个基于 NodeJS 的云函数,它使用域范围的委托访问来使用 API 方法 gmail.users.settings.delegates.list。
我正在寻找不使用服务帐户 JSON 密钥的解决方案,我想改用默认凭据。
我使用这个 launch.json 文件配置我的本地环境来模拟云功能环境
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch usersOnBehalfCheck",
"skipFiles": [
"<node_internals>/**"
],
"env": {
"GCP_PROJECT":"projectId",
"GOOGLE_APPLICATION_CREDENTIALS": "pathToJsonFile.json"
},
"program": "${workspaceFolder}/index.js"
}
]
}
将 env 变量打印GOOGLE_APPLICATION_CREDENTIALS
到 GCF 中似乎这个变量根本不存在,但我不明白如何更好地模拟 GCF env
谈到auth对象,我发现了两种方法:
第一的:
const gmailDWDAuth = new GoogleAuth({ clientOptions: { subject: inputData.userPrimaryEmail }, scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
console.info({ gmailDWDAuth: gmailDWDAuth }, null, 2);
return gmail.users.settings.delegates.list({ userId: 'me', auth: gmailDWDAuth })
第二:
const gmailDWDAuth = await google.auth.getClient({ clientOptions: { subject: inputData.userPrimaryEmail }, scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
console.info({ gmailDWDAuth: gmailDWDAuth }, null, 2);
return gmail.users.settings.delegates.list({ userId: 'me', auth: gmailDWDAuth })
inputData.userPrimaryEmail
包含与服务帐号在同一组织中的有效 GSuite 帐号。
Bad Request
当我将 GCF 发布到 GCP 时,这两种方式在本地都可以正常工作,但会因错误而停止工作。
谁能帮忙?
编辑
几个小时后,我发现这篇文章谈到了它
我按照他的指示修改了我的代码
第三:
const DWDAuth = await google.auth.getClient({ scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
DWDAuth.subject = inputData.userPrimaryEmail;
console.info(util.inspect({ DWDAuth: DWDAuth }));
return gmail.users.settings.delegates.list({ userId: inputData.userPrimaryEmail, auth: DWDAuth })
第四:
const DWDAuth = new GoogleAuth({ scopes: ['https://www.googleapis.com/auth/gmail.settings.basic'] });
const DWDAuthClient = await DWDAuth.getClient();
DWDAuthClient.subject = inputData.userPrimaryEmail;
console.info(util.inspect({ DWDAuthClient: DWDAuthClient }));
return gmail.users.settings.delegates.list({ userId: inputData.userPrimaryEmail, auth: DWDAuthClient })
和以前一样,所有这些在本地都可以正常工作,但是我对 GCF 提出了错误的请求
解决方案
推荐阅读
- android - 是否可以下载已编译的 c++ 二进制文件并在 iOS 上运行时加载它?
- swift - Swift - 如何限制几个特定的文本字段只允许插入 int?
- python - 在 Dockerfile 上运行安装 python 包
- c# - 在 Microsoft Teams 对话结束时清除对话状态的可能方法
- ionic-framework - 如何在 Ionic Mobile App 中测试哪个组件消耗更多电池
- python - 要导入,目录是否必须在 sys.path 中?
- javascript - Bootstrap Carousel 中的项目数返回 0
- java - 如何从另一个 LocalDate 中减去一个 localDate
- printing - 我正在尝试获取行空间但不想使用 print() 命令
- javascript - 通过 JS 提示输入的问题