2016-10-24 1 views
2

J'utilise [Net::Google::Drive::Simple][1] pour aller chercher un document sur le Web et le placer sur mon Google Drive. Le script fonctionnait correctement jusqu'à ce que je commence à recevoir l'erreur suivante: Token refresh failed at /usr/local/share/perl/5.20.2/OAuth/Cmdline.pm line 76.Obtention du message "400 Bad Request" et "invalid_grant" avec "Net :: Google :: Drive :: Simple"

Impression sur les en-têtes de la réponse de Google affiche les éléments suivants:

HTTP/1.1 400 Bad Request 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Connection: close 
Date: Mon, 24 Oct 2016 08:32:13 GMT 
Pragma: no-cache 
Accept-Ranges: none 
Server: GSE 
Vary: Accept-Encoding 
Content-Type: application/json; charset=utf-8 
Expires: Mon, 01 Jan 1990 00:00:00 GMT 
Alt-Svc: quic=":443"; ma=2592000; v="36,35,34" 
Client-Date: Mon, 24 Oct 2016 08:32:13 GMT 
Client-Peer: 2607:f8b0:4006:80e::200d:443 
Client-Response-Num: 1 
Client-SSL-Cert-Issuer: /C=US/O=Google Inc/CN=Google Internet Authority G2 
Client-SSL-Cert-Subject: /C=US/ST=California/L=Mountain View/O=Google Inc/CN=accounts.google.com 
Client-SSL-Cipher: ECDHE-RSA-AES128-SHA 
Client-SSL-Socket-Class: IO::Socket::SSL 
X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 

{ 
    "error" : "invalid_grant" 
} 

Répondre

2

La première chose à vérifier:

horloge de votre serveur est non synchronisé avec les NTP. (Solution: vérifiez l'heure du serveur si son correctif incorrect il.)

Deuxième chose à vérifier:

Votre jeton de rafraîchissement n'est pas valide, vous avez besoin d'un nouveau. Authentifiez à nouveau votre code.

Causes possibles du remplacement d'un jeton d'actualisation.

  1. L'utilisateur l'a révoqué dans son compte Google.
  2. Le jeton d'actualisation n'a pas été utilisé pour obtenir un nouveau jeton d'accès depuis six mois.
  3. Nombre maximal de jetons d'actualisation pour un utilisateur atteint: Si un utilisateur authentifie votre application, vous obtenez un jeton d'actualisation associé à l'utilisateur qui l'a authentifié. Si l'utilisateur l'exécute à nouveau et vous obtenez un deuxième jeton d'actualisation. Vous pouvez avoir jusqu'à 25 jetons d'actualisation en attente pour chaque utilisateur, auquel cas le premier donné expirera et ne fonctionnera plus. C'est pourquoi il est important de toujours enregistrer le jeton d'actualisation le plus renvoyé pour un utilisateur.
+0

J'ai vérifié l'horloge. C'est sur. Lorsque vous dites «authentifiez à nouveau votre code», que voulez-vous dire exactement? – StevieD

+2

Oauth2, ouvrez la fenêtre pour demander l'accès. Vous utilisez un jeton d'actualisation où l'avez-vous obtenu? Votre script avait besoin d'une autorisation pour écrire sur votre compte Google Drive. – DaImTo

+0

Ceci est un script Perl faisant le travail qui récupère le secret d'un fichier .yml sur mon serveur. Lorsque je regarde ma console Google, je peux voir les informations d'identification de l'API Google Drive et tout correspond à ce qui se trouve dans mon fichier .yml. – StevieD