有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当使用服务帐户列出GSuite上的驱动器文件时,java被授权

我有一个使用谷歌API的应用程序。我为它创建了一个服务帐户,下载了密钥并为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();

我犯了一个错误。 我相当肯定重新设置服务帐户的所有步骤都已成功完成,并且启用了域范围的委派,甚至凭据也似乎正常。范围当然是正确的。 下一步我该去哪里

details


共 (1) 个答案

  1. # 1 楼答案

    401 Unauthorized error.

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

    你试过做档案吗。在服务帐户上列出自己的帐户,以查看其是否正常工作。这将告诉您这是您的授权问题还是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();