2011-01-29 6 views
1

Je développe une application Java où j'implémente l'OAuth à 3 pattes en utilisant google gdata en Java. Cette application est enregistrée sur Google App Engine. Lors de la première étape, j'obtiens le jeton de demande non autorisé avec succès. Je stocke ce jeton en session et crée un lien en utilisant createUserAuthorizationUrl (oauthParameters). Puis en cliquant sur le lien, il me redirige vers "Grant Access Page".comment obtenir un jeton d'accès en utilisant gdata dans java

Maintenant, même si j'autorise l'accès, il ne me montre pas this page. Mais, il me redirige vers mon URL de rappel. Cependant, cela semble correct. Mais, il n'ajoute pas l'entrée sous My Account. Ici, je stocke le oauth_token en session.

Lorsque vous êtes redirigé, l'URL de cette page contient 0auth_token & oauth_verifier, les deux! Maintenant, sur cette URL de rappel, j'ai un bouton de soumission & définir l'action de pour un accessTokenServlet.java. Le code de ce servlet est le suivant:

Maintenant, j'envoie une requête pour récupérer le jeton d'accès. Mon code est:

  GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); 
      oauthParameters.setOAuthConsumerKey(CONSUMER_KEY); 
      oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET); 
      oauthParameters.setOAuthType(OAuthParameters.OAuthType.THREE_LEGGED_OAUTH); 

      GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(new OAuthHmacSha1Signer()); 

      oauthParameters.setOAuthToken(request.getSession().getAttribute("oauth_token").toString()); 
      oauthParameters.setOAuthTokenSecret(request.getSession().getAttribute("oauth_token_secret").toString()); 

      try { 
       String accessToken = oauthHelper.getAccessToken(oauthParameters); 
       out.println("Access Token : " + accessToken); 
      } catch (OAuthException e) { 
       //System.out.print("Response Status : " + response.getStatus()); 
       out.println("Exception : "); 
       e.printStackTrace(); 
       return; 
      } 

En cliquant sur le bouton soumettre, il imprime "jeton d'accès:" & rien! Aucun jeton ne revient!

Je me trompe à l'étape de l'autorisation du jeton de demande lui-même. Mais, je ne reçois pas, quel problème a été généré?

Répondre

0

La page avec le vérificateur auquel vous avez lié ne devrait apparaître que si vous passez un oauth_callback de oob - ceci indique que vous allez déplacer le vérificateur hors bande. Je recommande fortement de ne pas utiliser oob pour autre chose que le débogage. Au lieu de cela, vous devez définir une URL de rappel et extraire le vérificateur de la chaîne de requête.

Dans le code ci-dessus, je ne vois rien qui définisse le vérificateur dans les paramètres OAuth, donc c'est probablement votre problème. Vous ne faites pas grand-chose en matière de gestion des erreurs, et c'est un élément très important du flux OAuth. Par exemple, une fois que vous l'avez fait, essayez d'annuler le processus OAuth et de voir comment votre application le gère.

Vous ne verrez que l'entrée dans votre liste de jetons émis après avoir terminé le processus et obtenu un jeton d'accès amélioré.

+0

Certainement! J'ai eu le point de "oauth_verifier". En fait, je mets l'URL de rappel et quand redirigé, il montre ce paramètre dans la chaîne de requête dans le navigateur. Je me trompe de ne pas aller le chercher! En outre, je suis en train de mettre en œuvre le point de "traitement des erreurs". Merci beaucoup ! –

+0

Il ne me permet pas de définir le service de feuille de calcul Google: SpreadsheetService googleService = new SpreadsheetService ("Searce-RIGadget-v1.0"); J'ai ajouté des pots Spreadsheet. –

+0

Vous devriez probablement créer une nouvelle question pour cela. C'est un problème différent. –

Questions connexes