Google Apps管理员可以使用云端硬盘SDK管理用户文件吗?

时间:2012-07-24 19:43:12

标签: google-docs-api google-apps google-drive-api

新的Drive SDK非常适合经过身份验证的用户。是否可以使用Drive SDK使用Google Apps管理员权限模拟其他域用户?

doclist API可以做到,但不可能使用此工具管理和复制文件(pdf,jpg)。

我正在使用Java代码:

credential_origine = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                    .setJsonFactory(JSON_FACTORY)
                    .setServiceAccountId("[email from console api]")
                    .setServiceAccountScopes(DriveScopes.DRIVE)
                    .setServiceAccountUser("user@domain.com")
                    .setServiceAccountPrivateKeyFromP12File(new File("key.p12")).build();

但是当我尝试检索user@domain.com的数据时出现错误。如果我发表评论.setServiceAccountUser("user@domain.com"),则代码适用于我用于创建密钥的帐户。

在旧的DOCList API中,我们通过请求的URL模拟了另一个用户。它有类似的东西吗?

3 个答案:

答案 0 :(得分:5)

您可以使用Service Accounts并指定用户在构建断言声明时进行模拟。

在API项目中创建服务帐户密钥后(来自APIs Console),您必须将此项目添加到cPanel中授权的第三方应用程序列表中。有关此内容的更多信息,请参见here。 您需要使用的“客户端ID”是绑定到服务帐户密钥的“客户端ID”,看起来像<APP_ID>-<OTHER_KEY>.apps.googleusercontent.com

由于您要管理其他用户文件,因此您必须授权Drive wide范围:https://www.googleapis.com/auth/drive

我们的大多数客户端库负责为开发人员提取索赔生成。如果您可以指定计划使用哪种语言,我可以通过提供代码片段来帮助您开始更新此答案。

答案 1 :(得分:0)

升级:

代码:

com.google.api.client.googleapis.auth.oauth2.GoogleCredential.Builder credential_origine_builder = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                    .setJsonFactory(JSON_FACTORY)
                    .setServiceAccountId("[[]]")
                    .setServiceAccountScopes(DriveScopes.DRIVE)
                    .setServiceAccountPrivateKeyFromP12File(new File("cfg/file.p12"));

credential_origine_builder.setServiceAccountUser("user@domain.com");

工作正常。

如果我们将.setServiceAccountScopes(DriveScopes.DRIVE)更改为

.setServiceAccountScopes(DriveScopes.DRIVE,Oauth2Scopes.USERINFO_EMAIL,Oauth2Scopes.USERINFO_PROFILE)

用于检索用户的名称和ID它似乎与.setServiceAccountUser("user@domain.com");

不兼容

使用3个范围仅适用于密钥的用户“所有者”...继续构建

答案 2 :(得分:0)

好的,这里是Dartlang中的完整代码,用于列出带有JSON密钥的模拟USER @ YOUR_DOMAIN用户文件

要运行它,您需要通过Google Developer Console生成JSON密钥(而不是P12) (在项目的上下文中:Apis&amp; auth - &gt;凭证) generate JSON key

dart项目在pubspec.yaml中的依赖关系:googleapis googleapis_auth async)

import 'package:googleapis/drive/v2.dart';
import 'package:googleapis_auth/auth_io.dart';
import 'package:async/async.dart';

final _credentials = new ServiceAccountCredentials.fromJson(r'''
{
  "private_key_id": "*PRIVATE_KEY_ID*",
  "private_key": "*PRIVATE_KEY_CONTENT*",
  "client_email": "*SOMETHING@developer.gserviceaccount.com*",
  "client_id": "*SOMETHING.apps.googleusercontent.co*m",
  "type": "service_account"
}
''', impersonatedUser: "*USER@YOUR_DOMAIN*");  //here you type user

const _SCOPES = const [DriveApi.DriveScope];

main() async {
  var http_client = await clientViaServiceAccount(_credentials, _SCOPES);
  var drive = new DriveApi(http_client);
  var docs = await drive.files.list(maxResults: 10);

  for (var itm in docs.items) {
    print(itm.title); //list docs titles
  }
}