模拟一个域的Drive的用户作为域管理员

时间:2012-09-27 13:26:40

标签: google-drive-api

我正在寻找一种使用管理员用户冒充谷歌应用领域用户的方法。我可以使用谷歌数据文档列表api轻松完成,但我无法找到一种方法来使用新的Drive API。

准确地说,我想要做的是使用Oauth2验证我的管理员用户(我已经这样做了),检索我的域用户列表然后冒充我的用户,或者至少能够访问文件和来自这些用户的云端硬盘的文档。

在谷歌应用程序的管理面板中,有Oauth使用者密钥和Oauth使用者密钥,但这些密钥用于Oauth1 2LO,而不是Oauth2。

有没有正确的方法/解决方法/黑客来实现我想要的东西?

致以最诚挚的问候,

杰罗姆

2 个答案:

答案 0 :(得分:2)

我只是将google-api-ruby-client视为一个例子,但您应该能够通过管理面板允许访问的服务帐户执行此操作 - >高级工具 - >管理第三方oauath客户。获得许可后,您可以在此处按照http://code.google.com/p/google-api-ruby-client/source/browse/service_account/analytics.rb?repo=samples服务帐户的示例进行操作,而不是使用

进行授权
client.authorization = asserter.authorize()

你可以使用

client.authorization = asserter.authorize("id@domain.com")

我还没有做过很多这方面的事情,但在通过此方法进行身份验证后,我已经能够列出用户在我的域上拥有的所有文档。

答案 1 :(得分:2)

感谢詹姆斯伍德沃德,我已经能够冒充用户了。我发布了一个答案来提供Java特定的细节。

  1. 在API控制台中创建服务帐户。创建了3个重要资源:
    1. 客户端ID:用于在Google Apps域上授权应用
    2. 电子邮件地址:用于授权应用程序的请求
    3. .p12密钥文件:用于授权应用程序的请求
  2. 在Google Apps管理面板上授权该应用,为其提供服务帐户客户端ID以及该应用所需的所有范围。
  3. 以这种方式创建GoogleCredential

    GoogleCredential serviceCred = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setServiceAccountId(SERVICE_ID)
                .setServiceAccountScopes(Arrays.asList(SCOPES))
                .setServiceAccountUser("impersonated.user@domain.com")
                .setServiceAccountPrivateKeyFromP12File("key.p12")
                .build();
    
  4. 现在可以使用这些凭据来验证应用在任何授权范围内发出的请求。