【问题标题】:How to get access token for admin.directory.userlist api?如何获取 admin.directory.userlist api 的访问令牌?
【发布时间】:2019-09-30 04:35:26
【问题描述】:

我创建了一个 gmail 插件。我正在尝试调用 api curl \ 'https://www.googleapis.com/admin/directory/v1/users?key=[YOUR_API_KEY]' \ --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --header 'Accept: application/json' \ --compressed

var loggedUser = Session.getActiveUser().getEmail();
var domain = loggedUser.split('@')[1];
do {
    page = AdminDirectory.Users.list({
    domain: domain,
    maxResults: 100,
    pageToken: pageToken,
   });
   var users = page.users;
    if (users) {
       for (var i = 0; i < users.length; i++) {
          var user = users[i];
          emails.push(user.primaryEmail);
       }
     } else {
       Logger.log('No users found.');
    }
    pageToken = page.nextPageToken;
   } while (pageToken);

我已添加所有必需的范围 https://www.googleapis.com/auth/admin.directory.user.readonly https://www.googleapis.com/auth/admin.directory.user 在我的应用程序清单中。如果我尝试直接点击 api,我会得到 401。在给出范围后,如果我必须手动调用这个 api,有人可以帮我如何获取 access_token 和 api_key 来调用 api 吗?

【问题讨论】:

  • Resources>使用高级服务
  • 是的,我实际上是在使用高级服务。然后我就能得到这些细节。但是当我将应用程序部署到我的域市场时,相同的 api 不起作用。我从谷歌云控制台将 ADMIN SDK 添加到我的应用程序中。但我无法调用这个 api。你能帮我看看如何让它工作吗?我需要获取我域的所有用户
  • @TheMaster 我正在尝试获得像this 这样的域用户。部署到市场后它会工作还是我需要改变任何东西
  • same api 不工作。你能edit你的问题添加更具体的细节吗?有什么错误?代码是什么?错误在哪一行?用户是谁?这可能会帮助其他人找到解决方案。
  • 如果您必须使用UrlFetchApp,那么您必须像在 curl 中一样发送标头。显示您的 fetchapp 代码和/或高级服务代码。

标签: google-apps-script google-workspace


【解决方案1】:

这对我有用:

示例代码:

...
var loggedUser = Session.getActiveUser().getEmail();
var domain = loggedUser.split('@')[1];
  var pageToken;
  var emails=[];
do {
    page = AdminDirectory.Users.list({
    domain: domain,
    maxResults: 100,
  //  pageToken: pageToken,
   });

  var url='https://www.googleapis.com/admin/directory/v1/users?domain='+domain;
      var options = {
    "method": "get",
    "pageToken": pageToken,    
    "muteHttpExceptions": true,
    "headers": {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
   "contentType": "application/json",       
   }
  var page = JSON.parse(UrlFetchApp.fetch(url,options));  
  Logger.log(page);
   var users = page.users;
    if (users) {
       for (var i = 0; i < users.length; i++) {
          var user = users[i];
          emails.push(user.primaryEmail);
       }
     } else {
       Logger.log('No users found.');
    }
    pageToken = page.nextPageToken;
   } while (pageToken);
...

appsscript.json:

{
  "timeZone": "America/Los_Angeles",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "AdminDirectory",
      "serviceId": "admin",
      "version": "directory_v1"
    }, {
      "userSymbol": "Gmail",
      "serviceId": "gmail",
      "version": "v1"
    }]
  },
  "webapp": {
    "access": "DOMAIN",
    "executeAs": "USER_DEPLOYING"
  },
  "oauthScopes": ["https://www.googleapis.com/auth/gmail.addons.execute", "https://www.googleapis.com/auth/gmail.addons.current.message.metadata", "https://www.googleapis.com/auth/gmail.modify", "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/admin.directory.user" ],
   "urlFetchWhitelist": [
    "https://www.googleapis.com/admin/directory/v1/users?domain="
  ],
  "executionApi": {
    "access": "MYSELF"
  },
  "gmail": {
    "name": "XXX",
    "logoUrl": "https://www.gstatic.com/images/icons/material/system/1x/XXX.png",
    "contextualTriggers": [{
      "unconditional": {
      },
      "onTriggerFunction": "XXX"
    }],
    "primaryColor": "#4285F4",
    "secondaryColor": "#4285F4",
    "openLinkUrlPrefixes": ["https://mail.google.com/"]
  }
}

【讨论】:

  • 嗨,这对我也有用。但这里的问题是这个 API 只适用于管理员用户。如果我们尝试将它用于非管理员用户,则会给出错误 GoogleJsonResponseException: Not Authorized to access this resource/API.。是否有任何其他 API 可以使其适用于所有用户?
  • AdminDirectory 的权限与您使用的 API 无关,而与管理控制台中的设置有关。如果您转到admin.google.com -> 目录 -> 用户,单击用户并选择“管理员角色和权限”,您可以更改用户的角色或创建自定义角色,为用户分配必要的权限以使用管理目录
猜你喜欢
  • 2015-05-11
  • 2017-02-14
  • 1970-01-01
  • 2013-03-02
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多