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 à:
- vérifier si la date d'expiration du jeton d'accès est inférieur à 6 minutes
- si oui, générer le nouveau jeton d'accès