我创建了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();
该问题似乎是一个授权问题,可以通过向服务帐户授予域范围的权限来解决。
将回顾上述成功与否的失败。
答案 0 :(得分:0)
将域范围的权限委派给服务帐户就可以了。我添加了以下范围:
https://www.googleapis.com/auth/drive
https://docs.google.com/feeds
https://spreadsheets.google.com/feeds
确保在
中定义这些范围List<String>
在代码中创建GoogleCredential时。