Google Drive API更改所有权oAuth

时间:2013-10-01 01:16:58

标签: java oauth permissions google-drive-realtime-api

我创建了oAuth2 Google云端硬盘应用,并在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而失败。

有什么想法吗?

编辑 -

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

在凭证构建过程中:

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

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

domain-wide delegation

将回顾上述成功与否的失败。

1 个答案:

答案 0 :(得分:0)

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

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

确保在

中定义这些范围
List<String> 

在代码中创建GoogleCredential时。