gpt4 book ai didi

java - 401 Unauthorized exception from Google Drive Service account authentication

转载 作者:行者123 更新时间:2023-11-30 10:31:45 25 4
gpt4 key购买 nike

我正在使用 google drive 服务帐户获取文件元数据,并使用 Using OAuth 2.0 for Server to Server Applications 中描述的以下引用步骤,该代码仅适用于我 8 个月前创建的一个 Gmail 帐户但如果我创建新的 gmail 帐户并执行以下代码,则会出现以下错误。

我们在这里不使用任何 G Suite。我无法确定旧帐户和新帐户之间的区别是什么,因为对于一个它有效而对于另一个它抛出 401 异常,如下所示。我们在开发人员控制台中为两个 gmail 帐户做了几乎相同的设置。

错误跟踪:-

Exception in thread "main" com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
at com.demo.google.auth.GDriveServiceAcctTest.main(GDriveServiceAcctTest.java:83)

我在开发者控制台做了什么 ->创建新的服务帐户并生成 p12 文件。启用 Google Drive API 和 Admin SDK

程序的输入是->

private static final String SERVICE_ACCT_ID="test-XXXX@YYYY.iam.gserviceaccount.com";
private static final String P12_FILE_PATH="D:\\XXXX-b9ryafcd4fb11c.p12";
private static final String ACCOUNT_USER="XXXX@gmail.com";
private static final String APPLICATION_NAME="ABCDEF";

源代码:-

public static void main(String[] args) throws Exception {
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(SERVICE_ACCT_ID)
.setServiceAccountPrivateKeyFromP12File(new java.io.File(P12_FILE_PATH))
.setServiceAccountScopes(Collections.singleton(DriveScopes.DRIVE))
.setServiceAccountUser(ACCOUNT_USER)
.build();

Drive driveService = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
FileList result = driveService.files().list().execute();
List<File> files = result.getItems();

if (files == null || files.size() == 0)
System.out.println("No Folder found.");
else
{
System.out.println("Files:" + files.size());
folderID = files.get(0).getId();
files = result.getItems();
if (files == null || files.size() == 0)
System.out.println("No files found");
else {
for (File file : files)
{
System.out.printf("%s (%s)\n", file.getTitle(), file.getId());
}
}
}

如果有人有解决此 401 错误的想法,请告诉我。谢谢。

最佳答案

请记住服务帐户不是您。必须预先授权服务帐户才能访问驱动器帐户。您需要与您希望它能够像任何用户一样访问的服务帐户共享目录或文件。

关于java - 401 Unauthorized exception from Google Drive Service account authentication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43039162/

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