Java 管理员SDK模拟是否需要真实用户帐户?

Java 管理员SDK模拟是否需要真实用户帐户?,java,oauth-2.0,google-apps,google-admin-sdk,Java,Oauth 2.0,Google Apps,Google Admin Sdk,在我的应用程序中,我列出了谷歌应用程序域中的所有用户。我有一个用于验证我的应用程序的服务帐户。到目前为止还不错 在列出用户之前,我需要提供一个应用程序可以模拟的用户帐户,如下所示: new GoogleCredential.Builder() .setTransport(HTTP_TRANSPORT) .setJsonFactory(JSON_FACTORY) .setServiceAccountId(serviceAcco

在我的应用程序中,我列出了谷歌应用程序域中的所有用户。我有一个用于验证我的应用程序的服务帐户。到目前为止还不错

在列出用户之前,我需要提供一个应用程序可以模拟的用户帐户,如下所示:

new GoogleCredential.Builder()
            .setTransport(HTTP_TRANSPORT)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(serviceAccountEmail)
            .setServiceAccountScopes(asList(scopes))
            .setServiceAccountUser(usernameToImpersonate)
            .setServiceAccountPrivateKey(privateKey)
            .build();
这很好,但我有两个问题:

  • 我目前没有存储管理员帐户用户名,因此我需要跳过一些障碍才能获得它,在某些情况下,我将不得不询问我的客户
  • 作为管理员帐户提供的帐户(可以访问管理员SDK)可能永远没有管理员权限。如果客户决定由其他人担任管理员,我的应用程序将不再工作
有办法解决这个问题吗?我有权限模拟域中的任何用户,这意味着我可以选择一个管理员,但问题是,在我提出此请求之前,我不知道谁是管理员。第22条

我认为我可以使用服务帐户电子邮件而不是真正的用户电子邮件(这将是理想的解决方案),但这只会让我对谷歌API产生奇怪的NullPointerException

2014年9月25日编辑:

从几天前开始,谷歌现在允许任何用户列出域(也包括子域)中的用户

然而,这有两个限制,这意味着对于我的特定用例,这不是我可以受益的东西

  • 您仍然需要一个(活动)用户名来发出请求,如果您不能列出用户,您将如何获得该用户名?我可能有一个用户名从注册,但该帐户可能会被删除在任何时候。还是第22条

  • 如果您使用的是非管理员帐户,则必须将viewType设置为“domain_public”,这意味着您只能看到可用字段的子集。“suspended”字段不是其中之一,您也不会在响应中得到任何挂起的用户。 (此处提供文档:)

  • 我可以接受“暂停”限制,但由于我无法在没有用户的情况下获得用户列表,这对我没有帮助