Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用nodejs库验证google分销商api的服务帐户时出现问题_Javascript_Node.js_Google Admin Sdk_Google Reseller Api - Fatal编程技术网

Javascript 使用nodejs库验证google分销商api的服务帐户时出现问题

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.' }

我正在尝试使用这个库访问google分销商api,它有非常多的文档,我指的是零散的文档。我尝试了以下示例,但在步骤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,我发现了这一点,这表明我的问题与模仿有关。因此,我在
subject
属性中与我的帐户电子邮件交换了电子邮件,其中指定了所有者权限。我还授予了服务帐户所有者的权利,因为在这一点上我是相当无知的。不幸的是,这只将错误消息更改为:

status: 401,
statusText: 'Unauthorized'
有人知道哪里出了问题吗?401表明缺少凭证。除了服务帐户的凭据之外,我还必须指定我的私人电子邮件凭据吗?如果是,那么在哪里?我没有在
google.auth.JWT.options
对象上找到任何听起来很有希望的属性。

为什么需要域范围的委托?
  • 当您使用服务帐户并启用域范围的委派时,这意味着您允许服务帐户向用户投诉并代表用户行事
  • 如果您使用的服务帐户没有模拟-服务帐户只能执行其已授权的操作-例如,它可以访问驱动器上的文件或访问您的日历-但仅当您与服务帐户显式共享这些文件时
  • 要执行服务帐户未经授权的请求,您需要使服务帐户模拟具有必要授权的域用户,即您需要模拟该用户
  • 但是,要模拟用户,您需要显式地授予服务帐户代表用户行事的权限-这称为域范围的委派
  • 启用域范围的委派不会使“每个创建的用户都必须通过手动授权”或影响任何其他与服务帐户无关的行为
  • domain-wide delegation
    所做的唯一事情就是允许服务帐户代表用户
  • 如果不启用域范围的委派,将不会授权用户的模拟,并且设置
    主题将抛出错误
参考文献:


您是否在管理控制台->安全性>API控件中为服务帐户提供了必要的作用域作为说明?您是否为您创建的服务帐户启用了域范围的委派?代码中的作用域是否足以满足您试图实现的请求?查看您的代码会很有帮助!我在变量
OAUTH2\u scopes
中发布了作用域。我已经添加了域范围的作用域。现在我的代码没有太多内容。我只尝试通过
google.relesser({version:“v1”,auth:authJWT})调用api。如果要使用模拟用户的服务帐户,必须启用域范围的委派。对于作用域,除了将其粘贴到代码中之外,还要确保在管理控制台中对其进行授权。为什么要使用服务帐户?我没有激活域范围的委派,因为我不希望每个创建的用户都必须通过手动授权。我检查了,范围在管理控制台中。我想使用服务帐户,因为我们想使用我们的后端转售gsuite,所以请求将是服务器到服务器的。我认为这就是确切的用例。这看起来很适合生产。但是在开发环境中也有这样做的方法吗?因为现在,脚本在我的机器上本地运行,而不是在授权域下运行的服务器上。我不明白为什么您不能在开发环境中测试代码,只要您下载了JSON_PRIVATE_KEY_文件的副本并将其存储在您在代码中指定的路径上。那么,我尝试了授权域和域范围的委托,但仍然出现了401错误。我检查了密钥文件,id是正确的。输入的电子邮件还具有所有者权限。很抱歉再次询问,但您是否提供了必要的作用域?并在云控制台中启用API?谷歌说:如果你看到的是一个服务帐户,请检查你是否已成功完成服务帐户页面中的所有步骤。请确保所有步骤都正确无误。似乎创建新帐户并将我的用户添加到其中就成功了。再次感谢你的帮助。你太棒了:-)