我创建了一个 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();
该问题似乎是一个委派问题,可以通过向服务帐户授予域范围的权限来解决。
将回复上述成功/失败。