【问题标题】:Is it possible to authorize admin service with another user credential?是否可以使用另一个用户凭据授权管理服务?
【发布时间】:2022-01-12 08:30:22
【问题描述】:

我想通过应用脚本为 GMail 编写一个附加组件,它会显示一些管理目录数据。

但我希望此插件可以在与我的管理员帐户不同的帐户上运行。例如,我每天使用我的 daily-mail@google.com 来查看电子邮件,有时我使用我的 admin@google.com 帐户来管理管理内容。

有没有办法以 admin@google.com 身份使用管理服务,同时以daily-mail@google.com 身份登录?

【问题讨论】:

    标签: google-apps-script google-admin-sdk


    【解决方案1】:

    答案:

    假设此其他用户没有管理员权限,您唯一的选择是使用具有域范围委派的服务帐户来模拟您的管理员帐户:

    工作流程:

    1. 创建service account
    2. 按照this guide 授予服务帐户域范围的委派,以便它可以用来模拟您域中的任何帐户:在这种情况下,是您的帐户。
    3. 导入并使用库 OAuth2 for Apps Script 以便在您的 Apps 脚本项目中使用服务帐户。
    4. 使用UrlFetchApp 调用所需的API,使用服务帐户的访问令牌。

    代码示例:

    例如,如果您想调用 Directory API 的 users.get 以从当前执行此操作的用户那里检索数据,您可以执行以下操作:

    function getService() {
      const service = OAuth2.createService("Service account")
                        .setTokenUrl('https://accounts.google.com/o/oauth2/token')
                        .setPrivateKey(SERVICE_ACCOUNT_PRIVATE_KEY)
                        .setIssuer(SERVICE_ACCOUNT_EMAIL)
                        .setSubject(IMPERSONATED_EMAIL)
                        .setPropertyStore(PropertiesService.getScriptProperties())
                        .setParam('access_type', 'offline')
                        .setScope('https://www.googleapis.com/auth/admin.directory.user')
      return service;
    }
    
    function getActiveUserData() {
      const service = getService();
      if (service.hasAccess()) {
        const userKey = Session.getActiveUser();
        const url = `https://admin.googleapis.com/admin/directory/v1/users/${userKey}`;
        const options = {
          headers: {
            'Authorization': "Bearer " + service.getAccessToken(),
            'Content-Type': 'application/json'
          },
          muteHttpExceptions: true
        }
        const resp = UrlFetchApp.fetch(url, options);
        const userData = JSON.parse(resp.getContentText());
        return userData;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多