2013-02-26 2 views
4

Я использую java-библиотеку для аутентификации oauth2 для доступа к электронной таблице google.Проблема с аутентификацией 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. Также, когда я печатаю «токен доступа» с объекта «учетные данные», он печатает действительный токен доступа.

ответ

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

электронная таблицаService.setHeader («Авторизация», «Носитель» + accessToken); Метод setHeader (String, String) не определен для типа SpreadsheetService, я использую gdata-spreadsheet-3.0.jar lib, вы можете использовать ту же версию –

+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, например, листы Google, но все открытые – eddyparkinson

Смежные вопросы