2013-02-26 123 views
4

我正在使用java库进行oauth2认证以访问谷歌电子表格。使用谷歌电子表格进行OAuth2认证问题

我使用下面的代码的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身份验证有什么问题。 另外,当我从“凭证”对象打印“访问令牌”时,它会打印一个有效的访问令牌。

回答

2

我用:

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

而不是:

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

还我不得不为刷新令牌添加代码。随着访问令牌很快到期。但是,刷新标记正如您所期望的那样工作。

+0

spreadsheetService.setHeader(“Authorization”,“Bearer”+ accessToken);对于我使用的SpreadsheetService类型,未定义setHeader(String,String)方法gdata-spreadsheet-3.0.jar lib可以使用相同版本 – 2016-04-19 06:15:32

+0

core-1.47.1.jar看起来是我使用的Jar文件 - https:/ /developers.google.com/gdata/javadoc/com/google/gdata/client/Service#setHeader(java.lang.String,java.lang.String) - 我在发送电子邮件时遇到了jar文件问题,因此使用了一个一个非标准的组合。 - 但这一天,我使用ethercalc,如谷歌表格,但所有公开的源泉 – eddyparkinson 2016-04-22 00:09:25