【发布时间】:2020-11-02 17:05:15
【问题描述】:
我正在尝试使用 nodejs 库访问谷歌经销商 api,该库具有非常糟糕的...,我的意思是参差不齐的文档。我尝试按照示例 here 进行操作,但在第 3 步失败并出现此错误:
code: 403,
errors: [
{
domain: 'global',
reason: 'insufficientPermissions',
message: 'Authenticated user is not authorized to perform this action.'
}
]
我的配置如下:
const OAUTH2_SCOPES = [
"https://www.googleapis.com/auth/admin.directory.user",
"https://www.googleapis.com/auth/apps.order",
"https://www.googleapis.com/auth/siteverification",
"https://www.googleapis.com/auth/cloud-platform",
];
const authJWT = new google.auth.JWT({
keyFile: JSON_PRIVATE_KEY_FILE,
scopes: OAUTH2_SCOPES,
subject: RESELLER_ADMIN_USER,
email: "gsuite-reseller@some-cool-name-because-why-not.iam.gserviceaccount.com",
});
使用基本的google fu,我发现了这个thread,这表明我的问题与冒充有关。因此,我将subject 属性中的电子邮件与我的帐户电子邮件交换了,该电子邮件具有指定的所有者权限。我还授予了服务帐户所有者权限,因为那时我很无知。不幸的是,这仅将错误消息更改为:
status: 401,
statusText: 'Unauthorized'
有人知道出了什么问题吗? 401 表明缺少凭据。除了服务帐户之外,我是否还必须指定我的私人电子邮件凭据?如果是,那么在哪里?我没有在 google.auth.JWT.options 对象上找到任何听起来很有希望的属性。
【问题讨论】:
-
您是否在管理控制台->安全> API 控制中为服务帐户提供了必要的范围,解释为 here?您是否为您创建的服务帐户启用了域范围的委派?您的代码中的范围是否足以满足您尝试实现的请求?看看你的代码会很有帮助!
-
我在变量
OAUTH2_SCOPES中发布了范围。我已经添加了域范围。我的代码现在没有更多内容了。我只尝试通过google.reseller({ version: "v1", auth: authJWT });调用api。 -
如果您想使用模拟用户的服务帐户,您必须启用域范围的委派。至于范围,除了将它们粘贴到代码中之外,请确保在管理控制台中对其进行授权。为什么要使用服务帐号?
-
我没有激活域范围的委派,因为我不希望每个创建的用户都必须经过手动授权。
-
我检查了,范围在管理控制台中。我想使用服务帐户,因为我们想使用我们的后端转售 gsuite,因此请求将是服务器到服务器。我认为这是确切的用例。
标签: javascript node.js google-admin-sdk google-reseller-api