Javascript 使用nodejs库验证google分销商api的服务帐户时出现问题
我正在尝试使用这个库访问google分销商api,它有非常多的文档,我指的是零散的文档。我尝试了以下示例,但在步骤3失败,出现以下错误:Javascript 使用nodejs库验证google分销商api的服务帐户时出现问题,javascript,node.js,google-admin-sdk,google-reseller-api,Javascript,Node.js,Google Admin Sdk,Google Reseller Api,我正在尝试使用这个库访问google分销商api,它有非常多的文档,我指的是零散的文档。我尝试了以下示例,但在步骤3失败,出现以下错误: code: 403, errors: [ { domain: 'global', reason: 'insufficientPermissions', message: 'Authenticated user is not authorized to perform this action.' }
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,我发现了这一点,这表明我的问题与模仿有关。因此,我在subject
属性中与我的帐户电子邮件交换了电子邮件,其中指定了所有者权限。我还授予了服务帐户所有者的权利,因为在这一点上我是相当无知的。不幸的是,这只将错误消息更改为:
status: 401,
statusText: 'Unauthorized'
有人知道哪里出了问题吗?401表明缺少凭证。除了服务帐户的凭据之外,我还必须指定我的私人电子邮件凭据吗?如果是,那么在哪里?我没有在google.auth.JWT.options
对象上找到任何听起来很有希望的属性。为什么需要域范围的委托?
- 当您使用服务帐户并启用域范围的委派时,这意味着您允许服务帐户向用户投诉并代表用户行事
- 如果您使用的服务帐户没有模拟-服务帐户只能执行其已授权的操作-例如,它可以访问驱动器上的文件或访问您的日历-但仅当您与服务帐户显式共享这些文件时李>
- 要执行服务帐户未经授权的请求,您需要使服务帐户模拟具有必要授权的域用户,即您需要模拟该用户
- 但是,要模拟用户,您需要显式地授予服务帐户代表用户行事的权限-这称为域范围的委派
- 启用域范围的委派不会使“每个创建的用户都必须通过手动授权”或影响任何其他与服务帐户无关的行为
所做的唯一事情就是允许服务帐户代表用户domain-wide delegation
- 如果不启用域范围的委派,将不会授权用户的模拟,并且设置
主题将抛出错误
OAUTH2\u scopes
中发布了作用域。我已经添加了域范围的作用域。现在我的代码没有太多内容。我只尝试通过google.relesser({version:“v1”,auth:authJWT})调用api代码>。如果要使用模拟用户的服务帐户,必须启用域范围的委派。对于作用域,除了将其粘贴到代码中之外,还要确保在管理控制台中对其进行授权。为什么要使用服务帐户?我没有激活域范围的委派,因为我不希望每个创建的用户都必须通过手动授权。我检查了,范围在管理控制台中。我想使用服务帐户,因为我们想使用我们的后端转售gsuite,所以请求将是服务器到服务器的。我认为这就是确切的用例。这看起来很适合生产。但是在开发环境中也有这样做的方法吗?因为现在,脚本在我的机器上本地运行,而不是在授权域下运行的服务器上。我不明白为什么您不能在开发环境中测试代码,只要您下载了JSON_PRIVATE_KEY_文件的副本并将其存储在您在代码中指定的路径上。那么,我尝试了授权域和域范围的委托,但仍然出现了401错误。我检查了密钥文件,id是正确的。输入的电子邮件还具有所有者权限。很抱歉再次询问,但您是否提供了必要的作用域?并在云控制台中启用API?谷歌说:如果你看到的是一个服务帐户,请检查你是否已成功完成服务帐户页面中的所有步骤。请确保所有步骤都正确无误。似乎创建新帐户并将我的用户添加到其中就成功了。再次感谢你的帮助。你太棒了:-)