2017-05-15 3 views
0

J'ai un script Google Apps déployé en tant qu'exécutable API. Je suis capable de l'invoquer depuis mon application web Java. Mais, il échoue seulement parfois avec Authorization is required to perform that operation. J'ai effectué l'analyse et trouvé que cela échoue car Apps Script renvoie cette erreur si le délai d'expiration du jeton d'accès est inférieur à 6 minutes. Il y a une raison pour laquelle Apps Script se comporte de cette manière, ce qui dépasse le cadre de cette question. Mais, la solution à ceci est de générer un nouveau access_token si le temps d'expiration est inférieur à 6 minutes.Détection de l'expiration du jeton d'accès lors de l'appel des API Google

J'utilise Java Google Client Library pour gérer les jetons d'accès:

GoogleCredential credential = new GoogleCredential.Builder() 
            .setTransport(httpTransport) 
            .setJsonFactory(jsonFactory) 
            .setClientSecrets("<<clientId>>", "<<clientSecret>>") 
            .build(); 
credential.setRefreshToken("<<refresh_token>>"); 

Utilisation du credential ci-dessus, je suis en train de créer l'objet Script:

Script scriptService = new Script.Builder(httpTransport, jsonFactory, credential).setApplicationName("test").build(); 

Invoke Apps Script:

scriptService.scripts().run("test script"); 

La bibliothèque client prend en charge la génération de l'accès jeton, stockez-le en mémoire et à l'expiration invoque l'API OAuth pour générer un nouveau jeton.

Maintenant, je dois vous suggetions à:

  1. vérifier si la date d'expiration du jeton d'accès est inférieur à 6 minutes
  2. si oui, générer le nouveau jeton d'accès

Répondre

0

Voici le code pour trouver le temps restant avant l'expiration du jeton et la génération du nouveau jeton d'accès:

c Heck si le délai d'expiration du jeton d'accès est inférieur à 6 minutes

credential.getExpiresInSeconds() 

si oui, générer le nouveau jeton d'accès

credential.refreshToken()