Question invalid_grant essayant d'obtenir le jeton oAuth de google


Je continue à avoir un invalid_grant erreur en essayant d'obtenir un jeton oAuth de Google pour se connecter à leurs contacts api. Toutes les informations sont correctes et j'ai vérifié trois fois si mal.

Est-ce que quelqu'un sait ce qui peut causer ce problème? J'ai essayé de configurer un identifiant de client différent, mais le résultat est le même, j'ai essayé de connecter de nombreuses manières différentes, y compris essayer l'authentification par force, mais toujours le même résultat.


85
2018-05-14 00:41


origine


Réponses:


J'ai rencontré ce problème lorsque je n'ai pas explicitement demandé un accès "hors ligne" lors de l'envoi de l'utilisateur à OAuth "Voulez-vous autoriser cette application à toucher vos fichiers?" page.

Assurez-vous de spécifier access_type = offline dans votre requête.

Détails ici: https://developers.google.com/accounts/docs/OAuth2WebServer#offline

(En outre, je pense que Google a ajouté cette restriction à la fin de 2011. Si vous possédez d'anciens jetons avant, vous devrez envoyer vos utilisateurs à la page des autorisations pour autoriser l'utilisation hors ligne.)


46
2018-05-14 21:57



J'ai rencontré ce même problème en spécifiant le "hors ligne" access_type dans ma demande selon la réponse de bonkydog. Bref, j'ai trouvé que la solution décrite ici fonctionnait pour moi:

https://groups.google.com/forum/#!topic/google-analytics-data-export-api/4uNaJtquxCs

Essentiellement, lorsque vous ajoutez un client OAuth2 dans la console de votre API Google, Google vous donnera un "ID client" et une "adresse e-mail" (en supposant que vous sélectionniez "webapp" comme type de client). Et malgré les conventions de dénomination trompeuses de Google, ils s'attendent à ce que vous envoyiez "l'adresse e-mail" comme valeur de client_id paramètre lorsque vous accédez à leurs API OAuth2.

Cela s'applique lors de l'appel de ces deux URL:

Notez que l'appel à la première URL réussir Si vous l'appelez avec votre "identifiant client" au lieu de votre "adresse email". Cependant, l'utilisation du code renvoyé à partir de cette demande ne fonctionnera pas lorsque vous tentez d'obtenir un jeton de support à partir de la deuxième URL. Au lieu de cela, vous obtiendrez un message "Erreur 400" et un message "invalid_grant".


53
2017-09-27 00:51



Bien qu'il s'agisse d'une vieille question, il semble que beaucoup le rencontrent encore: nous avons passé des jours à la suivre nous-mêmes.

Dans la spécification OAuth2, "invalid_grant" est une sorte de fourre-tout pour toutes les erreurs liées à des jetons invalides / expirés / révoqués (jeton d'authentification ou de rafraîchissement d'authentification).

Pour nous, le problème était double:

  1. L'utilisateur a activement révoqué l'accès à notre application
    Fait sens, mais obtenez ceci: 12 heures après la révocation, Google arrête d'envoyer le message d'erreur dans leur réponse: “error_description” : “Token has been revoked.”
    C'est plutôt trompeur car vous supposez que le message d'erreur est présent à tout moment, ce qui n'est pas le cas. Vous pouvez vérifier si votre application a toujours accès au page d'autorisation des applications.

  2. L'utilisateur a réinitialisé / récupéré son mot de passe Google
    En décembre 2015, Google a changé leur comportement par défaut de sorte que le mot de passe réinitialisé pour les utilisateurs non-Google Apps révoquerait automatiquement tous les jetons d'actualisation des applications de l'utilisateur. Lors de la révocation, le message d'erreur suit la même règle que le cas précédent, de sorte que vous n'obtiendrez que la "description_erreur" dans les 12 premières heures. Il ne semble pas y avoir de moyen de savoir si l'utilisateur a révoqué manuellement l'accès (intentionnel) ou s'il a été réinitialisé (effet secondaire).

En dehors de celles-ci, il existe une multitude d'autres causes potentielles qui pourraient déclencher l'erreur:

  1. L'horloge / l'heure du serveur n'est pas synchronisée
  2. Non autorisé pour un accès hors connexion
  3. Étranglé par Google
  4. Utilisation de jetons de rafraîchissement expirés
  5. L'utilisateur est inactif depuis 6 mois
  6. Utiliser le courrier électronique du travailleur du service au lieu de l'identifiant du client
  7. Trop de jetons d'accès en peu de temps
  8. Client SDK peut être obsolète
  9. Jeton d'actualisation incorrect / incomplet

J'ai écrit un court article résumer chaque élément avec des conseils de débogage pour aider à trouver le coupable. J'espère que cela aide.


35
2017-07-18 10:08



J'ai rencontré le même problème. Pour moi, j'ai corrigé cela en utilisant Email Address (la chaîne qui se termine par ... @ developer.gserviceaccount.com) au lieu de l'ID client pour la valeur du paramètre client_id. Le nom défini par Google est déroutant ici.


7
2017-12-04 07:40



J'ai eu le même message d'erreur "invalid_grant" et c'était parce que le authResult ['code'] Envoyer depuis le côté client javascript n'a pas été reçu correctement sur le serveur.

Essayez de le sortir du serveur pour voir s'il est correct et non une chaîne vide.


2
2018-05-18 08:45



Mon problème était que j'ai utilisé cette URL:

https://accounts.google.com/o/oauth2/token

Quand j'aurais dû utiliser cette URL:

https://www.googleapis.com/oauth2/v4/token

Cela testait un compte de service qui voulait un accès hors ligne à la Moteur de stockage.


2
2018-01-12 16:55



si vous utilisez la bibliothèque scribe, configurez simplement le mode hors ligne, comme suggéré par bonkydog voici le code:

OAuthService service = new ServiceBuilder().provider(Google2Api.class).apiKey(clientId).apiSecret(apiSecret)
                .callback(callbackUrl).scope(SCOPE).offline(true)
                .build();

https://github.com/codolutions/scribe-java/


1
2017-10-19 17:33



dans ce site console.developers.google.com

cette console choisit votre projet en saisissant l’url du serment. l'url de rappel oauth sera redirigé lorsque le succès oauth


1
2018-01-14 01:05