【发布时间】:2020-07-10 16:44:12
【问题描述】:
我有一个使用 Google API 的应用程序。我为它创建了一个服务帐户,下载了密钥并为 GSuite 启用了域范围的委派。范围包括 Drive。 我正在尝试通过使用服务帐户来模拟这样的用户来遍历 GSuite 用户的云端硬盘文件:
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential.Builder builder = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(serviceAccountEmail)
.setServiceAccountPrivateKey(credFromJson(HTTP_TRANSPORT).getServiceAccountPrivateKey())
.setServiceAccountScopes(SCOPES);
builder.setServiceAccountUser(userEmail);
GoogleCredential credential = builder.build();
return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, null)
.setApplicationName(APPLICATION_NAME)
.setHttpRequestInitializer(credential).build();
GoogleCredential 已成功创建。它有 serviceAccountId、serviceAccountPrivateKey、serviceAccountUser 和所需的范围。
但是调用时
driveService.files().list().setFields("nextPageToken, files(*)").execute().getFiles();
我收到 401 未经授权的错误。 我相当确定所有支持服务帐户的步骤都已成功完成,并且启用了域范围的委派,甚至凭证似乎也没有问题。范围肯定是正确的。 接下来我应该看哪里?
【问题讨论】:
标签: java google-api google-oauth service-accounts