google-api - 从 aws lambda 访问 Google API:无效的 OAuth 范围
问题描述
我仍在为 Google 的 api 和服务术语而苦苦挣扎,但我的目标是通过 aws lambda 实现自动化功能,这些功能作用于 G Suite 帐户(域?)或更具体地作用于该域的用户。
现在我只想列出该域的所有用户。我在本地运行此代码进行测试。
我做了什么:
- 我创建了一个服务帐户
- 我下载了包含私钥、私钥ID等的json密钥文件
- 我启用了 G Suite 域范围委派。
- 我从 GSuite 帐户向服务帐户委派了域范围的权限
我在 GSuite 管理控制台中为客户端添加了以下范围:
这是实现:
const { google } = require("googleapis");
const auth = new google.auth.GoogleAuth({
keyFile: "credentials.json",
scopes:
"https://www.googleapis.com/auth/drive.readonly,https://www.googleapis.com/admin/directory/v1, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user",
});
const service = google.admin({ version: "directory_v1", auth });
service.users.list(
{
domain: "my.domain.com",
maxResults: 10,
orderBy: "email",
},
(err, res) => {
if (err) return console.error("The API returned an error:", err.message);
const users = res.data.users;
if (users.length) {
console.log("Users:");
users.forEach((user) => {
console.log(`${user.primaryEmail} (${user.name.fullName})`);
});
} else {
console.log("No users found.");
}
}
);
我不知道为什么我必须在GoogleAuth
对象中添加范围,但我是从谷歌文档中获取的。
当我运行它时,我收到以下错误:
The API returned an error: invalid_scope: Invalid OAuth scope or ID token audience provided.
解决方案
- 目录 API 只能由管理员使用
- 服务帐户不是管理员
- 如果服务帐户代表管理员,您需要
- 启用 G Suite 域范围委派(就像您已经做过的那样)
- 通过设置要模拟的用户将服务帐户模拟为管理员
通常,当您使用服务帐户时,您需要构建身份验证流程,如文档中所述,即您需要创建 JSON Web Token (JWT) 指定要模拟的用户。
Javascript 的示例代码片段:
const jwtClient = new google.auth.JWT(
privatekey.client_email,
null,
privatekey.private_key,
scopes,
user // User who will be impersonated (needs to be an admin)
);
await jwtClient.authorize();
return jwtClient;
推荐阅读
- c# - 具有 ApplicationTrigger 的后台任务的多个实例
- artificial-intelligence - αβ修剪中的α和β
- azure - 我可以在 ASE 中部署 Durable Azure Function
- pentaho - pentaho应用服务器集群和carte集群的区别
- jquery - 通过获取 id 创建追加
- python - 如何自动更改字符串中的字符?
- ios - 彼此相切的圆。如何检测点击了哪个圆圈?
- python - 如何用 xy shift 叠加多个直方图
- php - meta og:image 不适用于我使用 SSL 的 wordpress 网站
- eiffel - 如何在 Eiffel 中初始化和填充链表?