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

我想使用Java Google Drive API。 我试过这段代码:

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 

我用这个配置:

在此处输入图像描述

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

根据此SO问题 ,您收到错误401的一个原因是您使用的服务帐户无权访问与您的Gmail地址关联的云端硬盘帐户。 因此,如果您希望能够访问上传的文件,您必须通过服务帐户授予自己访问权限的权限。

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

  • google oauth2使用user@gmail.com模拟服务帐户

  • 谷歌驱动器api服务帐户使用java查看上传的文件到谷歌驱动器

  • Google云端硬盘按服务帐户更改权限