Java com.google.api.client.auth.oauth2.TokenResponseException:401未经授权

Java com.google.api.client.auth.oauth2.TokenResponseException:401未经授权,java,google-drive-api,Java,Google Drive Api,我想使用JavaGoogleDriveAPI。 我尝试了以下代码: public Drive getDriveService() throws GeneralSecurityException, IOException, URISyntaxException { HttpTransport httpTransport = new NetHttpTransport(); JacksonFactory JSON_FACTORY = new JacksonFac

我想使用JavaGoogleDriveAPI。 我尝试了以下代码:

public Drive getDriveService() throws GeneralSecurityException, IOException, URISyntaxException
    {
        HttpTransport httpTransport = new NetHttpTransport();
        JacksonFactory JSON_FACTORY = new JacksonFactory();

        GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId("sonoratestw-226@sonora-project.iam.gserviceaccount.com")
            .setServiceAccountPrivateKeyFromP12File(new java.io.File("C:\\buffer\\sonora project-3256770463ed.p12"))
            .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
            .setServiceAccountUser("sonoratestw@gmail.com")
            .build();

        Drive service = new Drive.Builder(httpTransport, JSON_FACTORY, null)
            .setApplicationName("FileListAccessProject")
            .setHttpRequestInitializer(credential).build();

        return service;
    }
但我得到了这个错误:

An error occurred: com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized
我使用以下配置:

您能告诉我如何解决这个问题吗?

基于此,您出现401错误的一个原因是您使用的服务帐户无法访问与您的Gmail地址关联的驱动器帐户。因此,如果您希望能够访问它上载的文件,您必须通过服务帐户授予自己对这些文件的访问权限

以下是我认为可以帮助您更多了解服务帐户的其他SO问题


我不认为您可以使用setServiceAccountUser,除非它是域管理员帐户,并且您已将服务帐户添加到管理员帐户,并且所涉及的用户也是管理员帐户上的用户。您能否给出它引发的总错误和异常?您找到解决方案了吗?请提供您的答案。谢谢您的回复,但我仍然找不到解决方案。你能提供更多的细节吗?@PeterPenzov你找到解决这个问题的方法了吗。非常感谢,我还没有。