使用服务帐号从 Google 域中获取用户列表

Nic*_*nes 7 google-api google-api-java-client service-accounts spring-boot


大家好。

我被分配了使用 Spring Boot 从 Google 域的每个成员的收件箱中获取未答复电子邮件的任务,但我无法做到。

首先,我需要域中的用户列表。这可以通过 Directory API 实现(顺便说一下,它不能在 Google Developer Console 中通过该名称启用。看起来它属于 Admin SDK 左右)。

到目前为止我所面临的是:

  • SO上有很多相关的问题,但大多数已经过时了。
  • Java Quickstart for Google Directory API 不包含使用服务帐户的示例,我想使用它们,因为我的应用程序在 docker 容器中运行,而使用 Oauth 意味着我每次部署新版本或重新启动时都需要手动授权它容器。
  • Google 文档参考了管理控制台中的“API 参考”设置,但我在那里没有看到该部分。

我没有将凭据存储在 JSON 文件中,而是将它们存储在环境变量中。我正在这样做:

var inputStream = IOUtils.toInputStream(apiCredentials, Charset.defaultCharset());  //apiCredentials is a string with the JSON contents.
var credential = GoogleCredential
                .fromStream(inputStream, httpTransport, JacksonFactory.getDefaultInstance())
                .createScoped(Collections.singleton(DirectoryScopes.ADMIN_DIRECTORY_USER));
var directoryService = new Directory.Builder(httpTransport, JacksonFactory.getDefaultInstance(), credential)
                .setApplicationName("My App")
                .build();
var result = directoryService.users().list()
                    .setPageToken(pageToken)
                    .setDomain("my.domain")
                    .setMaxResults(10)
                    .execute();
Run Code Online (Sandbox Code Playgroud)

在此之后,我收到一个400 Bad request错误,没有进一步的描述。

我在这里做错了什么?