2017-06-04 2 views
0

Après avoir récupéré le code d'autorisation de JavaScript, et l'avoir transmis au serveur, nous obtenons en effet un jeton d'accès (et un jeton d'identification), mais pas le jeton d'actualisation requis.Obtention de l'API Gmail et jeton d'identification, mais le jeton d'actualisation est NULL

Il y a beaucoup de publications mais je ne peux pas encore le résoudre.

Une suggestion pour obtenir le jeton d'actualisation?

merci!

private String getResponseToken(GoogleClientSecrets clientSecrets, 
               String authCode) throws IOException { 
     try { 
      GoogleTokenResponse tokenResponse = 
        new GoogleAuthorizationCodeTokenRequest(
          new NetHttpTransport(), 
          JacksonFactory.getDefaultInstance(), 
          "https://www.googleapis.com/oauth2/v4/token", 
//      "https://accounts.google.com/o/oauth2/token", 
          clientSecrets.getDetails().getClientId(), 
          clientSecrets.getDetails().getClientSecret(), 

          authCode, //NOTE: was received from JavaScript client 

          "postmessage" //TODO: what's this? 
          ).execute(); 
      String accessToken = tokenResponse.getAccessToken(); 
      String idToken = tokenResponse.getIdToken(); 

      //TODO: not getting a refresh token... why?! 
      String refreshToken = tokenResponse.getRefreshToken(); 
      Boolean hasRefreshToken = new Boolean(!(refreshToken == null)); 
      LOGGER.warn("received refresh token: {}", hasRefreshToken); 

      LOGGER.debug("accessToken: {}, refreshToken: {}, idToken: {}", accessToken, refreshToken, idToken); 
      return accessToken; 
     }catch (TokenResponseException tre){...} 
+0

double possible de https://stackoverflow.com/questions/10631042/how-to-generate-access- jeton-en utilisant-rafraîchir-jeton-par-google-drive-api – noogui

+0

ne ressemble pas à un doublon. En fait, à la recherche de la première étape accomplie dans ce post: "J'ai complété les étapes d'autorisation et obtenu le jeton d'accès et le jeton d'actualisation.". C'est ce dont nous avons besoin: obtenir le jeton d'actualisation. Quelqu'un d'autre a noté au bas de ce post qu'il l'avait en PHP avec $ client-> setAccessType ("offline");). La question est comment obtenir le jeton d'actualisation initial en utilisant l'API Java? – Roy

Répondre

2

L'API Gmail donne uniquement le jeton d'actualisation la première fois que vous demandez l'autorisation des utilisateurs. (Au moins c'est ce qui m'arrive).

Rendez-vous sur: https://myaccount.google.com/permissions?pli=1, supprimez l'autorisation pour votre application et exécutez votre code. Vous devriez recevoir le jeton d'actualisation.

+0

Salut Ricardo, merci mais ça ne semble pas résoudre. Si vous supprimez l'autorisation de l'application, l'invite d'autorisation s'affichera à nouveau pour l'utilisateur, mais le résultat, qui ne reçoit pas de jeton d'actualisation, reste le même. – Roy

0

vous devez ajouter le

  1. AccessType = "offline"

Vous devez appeler la fonction

new GoogleAuthorizationCodeRequestUrl(...).setAccessType("offline") 

ou d'une autre syntaxe:

var authReq = new GoogleAuthorizationCodeRequestUrl(new Uri(GoogleAuthConsts.AuthorizationUrl)) { 
    RedirectUri = Callback, 
    ClientId = ClientId, 
    AccessType = "offline", 
    Scope = string.Join(" ", new[] { Scopes... }), 
    ApprovalPrompt = "force" 
}; 

dans F iddler vous devriez voir la demande suivante:

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/webmasters&redirect_uri=http://mywebsite.com/google/scapi/callback/&response_type=code&client_id=xxx&access_type = déconnecté

voir aussi here

Plus de détails sur setAccessType se trouvent here

0

après avoir trouvé comment utiliser les API Google à le backend (la documentation est quelque peu partielle ..), le problème a été corrigé du côté FrontEnd en modifiant un paramètre:

grantOfflineAccess ({ - invite: 'select_account' + invite: 'consentement'

HTH