2013-02-26 7 views
4

J'utilise la bibliothèque java pour l'authentification oauth2 pour accéder à la feuille de calcul google.Problème avec l'authentification OAuth2 avec google spreadsheet

J'utilise ci-dessous le code pour l'authentification 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(); 

Après avoir obtenu "des titres de compétences", en utilisant ci-dessous code pour lire une feuille de calcul:

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()); 

exécution code ci-dessus me rendre résultat total 0.

Si j'utilise:

service.setUserCredentials("email", "password"); 

à la place de l'authentification oauth2, il me donne des résultats corrects. Vous ne savez pas quel est le problème avec l'authentification OAuth2. De même, lorsque j'imprime un «jeton d'accès» à partir d'un objet «accréditif», il imprime un jeton d'accès valide.

Répondre

2

-je utiliser:

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

plutôt que:

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

aussi je dû ajouter un code pour le jeton de rafraîchissement. Comme le jeton d'accès expire bientôt. Mais le jeton d'actualisation fonctionne comme prévu.

+0

spreadsheetService.setHeader ("Autorisation", "Support" + accessToken); La méthode setHeader (String, String) n'est pas définie pour le type SpreadsheetService J'utilise gdata-spreadsheet-3.0.jar lib pouvez-vous utiliser la même version –

+0

core-1.47.1.jar ressemble au fichier Jar que j'ai utilisé - https://developers.google.com/gdata/javadoc/com/google/gdata/client/Service#setHeader(java.lang.String, java.lang.String) - J'ai eu des problèmes de fichier jar avec l'envoi de courrier électronique, et j'ai donc utilisé un peu d'une combinaison non standard. - Mais ces jours-ci j'utilise ethercalc, comme des feuilles de google mais toutes les sources ouvertes – eddyparkinson