0

我创建了一个 oAuth2 Google Drive 应用程序,并正在 developer.gserviceaccount.com 服务帐户下创建新文件。我想将所有权更改为域中拥有此服务帐户的另一个帐户。

我有新创建的文件的文件 ID 和我想将所有权转移到的用户的权限 ID,但是当我运行时:

File body;
File file;

body = new File();
body.setTitle(gdf.getTitle());
body.setDescription(gdf.getDescription());            
body.setMimeType(gdf.getMime_type());
body.setUserPermission(p);

// new file gets created ok
file = d.files().insert(body).execute();  

// create new permission for new user account
Permission p = new Permission();
p.setRole("owner");
p.setType("user");
p.setValue("newaccount@something.com");
p.setId(ACCESS_DOMAIN_PERMISSION_ID);  // <-- known value

d.permissions().update(file.getId(), ACCESS_DOMAIN_PERMISSION_ID, p).execute();

该语句未能抱怨无法找到 ACCESS_DOMAIN_PERMISSION_ID。

有什么想法吗?

编辑 -

忽略上述 - 现在看来我可以模拟域中的用户以非 developer.gserviceaccount.com 用户的身份完成文件创建:

在凭证构建过程中:

GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(jsonFactory)
    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)                
    .setServiceAccountScopes(scopes)                
    .setServiceAccountPrivateKeyFromP12File(pk12)
    .setServiceAccountUser(ACCESS_DOMAIN_IMPERSONATE)    
    .build();

该问题似乎是一个委派问题,可以通过向服务帐户授予域范围的权限来解决。

全域委托

将回复上述成功/失败。

4

1 回答 1

0

将域范围的权限委派给服务帐户就可以了。我添加了以下范围:

https://www.googleapis.com/auth/drive
https://docs.google.com/feeds
https://spreadsheets.google.com/feeds

确保在

List<String> 

在您的代码中创建 GoogleCredential 时。

于 2013-10-01T18:16:16.220 回答