我正在使用Java库进行oauth2身份验证,以访问Google电子表格。

我正在使用以下代码进行OAuth2身份验证:

credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
    .setTokenServerEncodedUrl("https://accounts.google.com/o/oauth2/token")
    .setServiceAccountScopes("https://www.googleapis.com/auth/drive", "https://spreadsheets.google.com/feeds", "https://docs.google.com/feeds")
    .setServiceAccountPrivateKeyFromP12File(new File("xxxxx-privatekey.p12")).build();

获得“凭据”后,使用以下代码读取电子表格:
SpreadsheetService service = new SpreadsheetService(
                        "MySpreadsheetIntegration");
service.setOAuth2Credentials(credential);
URL SPREADSHEET_FEED_URL = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");
SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class);
System.out.println(feed.getTotalResults());

执行上面的代码将总结果返回给我0。

如果我使用:
service.setUserCredentials("email", "password");

代替oauth2身份验证,它可以带给我正确的结果。不确定OAuth2身份验证出了什么问题。
同样,当我从“凭据”对象打印“访问 token ”时,它也会打印有效的访问 token 。

最佳答案

我用:

spreadsheetService = new SpreadsheetService("cellmaster.com.au-v0.2");
spreadsheetService.setHeader("Authorization", "Bearer " + accessToken);

而不是:
spreadsheetService = new SpreadsheetService("cellmaster.com.au-v0.2");
spreadsheetService.setOAuth2Credentials(credential);

我还必须为刷新 token 添加代码。由于访问 token 即将过期。但是刷新 token 可以像您期望的那样工作。

10-05 22:50