0

我正在尝试使用API 管理我工作区中的公司设备。第一步是拉出当前设备的列表。代码在应用程序脚本中。

我越来越:

Exception: Request failed for https://cloudidentity.googleapis.com returned code 403. Truncated server response: {
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

我做过的事情

  1. 服务帐户对 cloud-platform、cloud-identity 和 cloud-identity.devices 具有域范围的委派
  2. 身份验证是通过 Google 的 OAuth 库完成的,似乎工作正常。
  3. OAuth 也有范围的空间,需要相同的空间。

代码位:

    var scriptProperties = PropertiesService.getScriptProperties()
    private_key= scriptProperties.getProperty('private_key').replace(/\\n/g, '\n')
    client_email = scriptProperties.getProperty("client_email")
    ;

    function getOAuthService() {
      return OAuth2.createService('Service Account')
        // Set the endpoint URLs
        .setTokenUrl('https://accounts.google.com/o/oauth2/token')

        // Set the client ID and secret
        .setPrivateKey(private_key)
        .setIssuer(client_email)

        // Set the property store where authorized tokens should be persisted
        .setPropertyStore(PropertiesService.getScriptProperties())
        // .setCache(CacheService.getUserCache())

        .setParam('access_type', 'offline')
        .setScope('https://www.googleapis.com/auth/cloud-identity');
    }

    function reset() {
      var service = getOAuthService();
      service.reset();
    }


    function downloadDevices() {
    var service = getOAuthService();
    service.reset();
      if (service.hasAccess()) {
        var pageToken;
        var URL = "https://cloudidentity.googleapis.com/v1/devices";
        var headers = {
            Authorization: 'Bearer ' + service.getAccessToken()
          };
        var options = {
                method : "GET",
                headers: headers
              };
          var response = UrlFetchApp.fetch(URL, options);
        } else {
        Logger.log('service Error');
        Logger.log(service.getLastError());
      }
    }

看起来一切都很好,只是我没有权限。但据我所知,没有更多相关的权限可以给予。

4

1 回答 1

0

根据提供的代码,我可以看到您可能没有进行用户模拟以获得正确的权限。通常当用户模拟没有正确完成时,系统可以从服务帐户获取权限,并且由于该帐户没有超级管理员权限,这就是您收到 403 错误的原因。

正确的方法是使用服务帐户模拟超级管理员,以便在调用 API 时获得足够的权限。

于 2022-02-15T16:07:09.433 回答