gpt4 book ai didi

java - 使用服务帐号列出 G Suite 上的云端硬盘文件时未经授权

转载 作者:行者123 更新时间:2023-12-01 17:42:28 25 4
gpt4 key购买 nike

我有一个使用 Google API 的应用程序。我为其创建了一个服务帐户,下载了 key 并为 GSuite 启用了域范围委派。范围包括驱动器。我正在尝试使用服务帐户来模拟用户,从而迭代 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 未经授权的错误。我相当确定服务帐户后的所有步骤都已成功完成,并且域范围的委派已启用,甚至凭据似乎也正常。范围当然是正确的。接下来我该看哪里?

details

最佳答案

401 Unauthorized error.

表示您无权访问。为什么您无权访问是另一个问题。这可能是委托(delegate)设置,也可能是您的身份验证。

您是否尝试过在服务帐户自己的帐户上执行 file.list 以查看其是否有效。这将告诉您是否是您的授权问题或 gsuite 设置问题。

但在我看来,您甚至没有设置凭据,这永远不会起作用。

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = GoogleCredential
.fromStream(new FileInputStream(KEY_FILE_LOCATION))
.createScoped(DriveScopes.all());

// Construct the Analytics Reporting service object.
return new Drive.Builder(httpTransport, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME).build();

关于java - 使用服务帐号列出 G Suite 上的云端硬盘文件时未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60928440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com