当前位置: 首页 > 知识库问答 >
问题:

u使用服务帐户列出GSuite上的驱动器文件时授权

司空鸿禧
2023-03-14

我有一个使用Google API的应用程序。我为它创建了一个服务号,下载了密钥并为谷歌办公套件启用了域范围的委托。范围包括驱动器。我正在尝试通过使用服务号来模拟用户来遍历谷歌办公套件用户的Drive文件,如下所示:

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已成功创建。它具有serviceAccount tId、serviceAccount tPrivate ateKey、serviceAccount tUser和所需的范围。

然而,当打电话时

driveService.files().list().setFields("nextPageToken, files(*)").execute().getFiles();

我得到401未授权错误。我相当肯定,注册服务帐户的所有步骤都已成功完成,并且启用了域范围的委派,甚至凭证看起来也没问题。范围当然是正确的。接下来我该去哪里找?

共有1个答案

寿元白
2023-03-14

401未经授权的错误。

意味着您没有访问权限。为什么您没有访问权限是另一个问题。这可能是委托设置,也可能是您的身份验证。

您是否尝试过在服务帐户自己的帐户上进行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();
 类似资料:
  • 我们正在使用服务帐户从服务器上传文件,它已经达到其存储配额限制。所有文件都被添加到另一个用户创建的文件夹下(一个@gmail.com帐户,存储配额为100 Gb),但上传的所有文件都归服务帐户所有。 请注意,我们没有真正的用户,我们只是使用谷歌驱动器存储目的。 目前,我们无法上传任何更多的文件使用服务帐户。 null 谢谢

  • 我正在工作上传文件在谷歌驱动器与服务帐户,我能够插入文件在谷歌驱动器,但我不能查看该文件在谷歌驱动器。 我是创建abc@gmail.com。用abc@gmail.com创建一个服务帐户。有了P12证书和服务客户端电子邮件id,我可以在驱动器中插入文件。但无法在abc@gmail.com的谷歌驱动器上看到该文件。当fatch从应用程序中的文件列表时,它将显示5个文件,但在我的abc@gmail.co

  • 在开发人员控制台中为特定应用程序用户(例如user@mydomain.com)创建的服务帐户是否可以访问该应用程序用户的文档?如果在中设置帐户,如下所示: 我收到以下错误: 当我没有设置时,我可以访问驱动器,但我只能看到一个文档“如何开始使用驱动器”。 如果我在服务帐户上创建文档,是否有任何方法可以将文档的所有权转移到我的应用程序帐户,而不启用域范围的委托?

  • 根据留档 GSuite Marketplace应用程序OAuth Web服务器应用程序离线访问 网络服务器应用程序可以由域的管理员通过 OAuth 授予域访问权限。对于其他域用户模拟,可以使用服务帐户。 在我的设置中,我有 > 启用了管理员 Gmail 市场 SDK 市场 API 的 Web 服务器应用。 Web服务器应用程序凭据可用。 提供具有域范围授权和凭据的服务帐户。 对于步骤 获取 Web

  • 是否可以使用服务帐户创建共享驱动器?。 由于没有UI服务号创建文件/文件夹,我需要一些方法 /APIs支持创建共享驱动器。 我可以在服务号下创建孩子(文件和文件夹),但不确定如何使用服务号创建共享驱动器。 向你问好,索拉夫