invalid_grant essayant d'obtenir un jeton oAuth de google
Je reçois un invalid_grant
erreur d'essayer d'obtenir un jeton oAuth de Google pour se connecter à leurs contacts api. Toutes les informations sont correctes et j'ai triple vérifié ce alors un peu perplexe.
Personne ne sait ce qui peut provoquer ce problème? J'ai essayé de configurer un client différent de l'id pour elle, mais j'obtiens le même résultat, j'ai essayé de connecter de nombreuses manières différentes, y compris en essayant de la forcer l'authentification, mais toujours le même résultat.
- pour moi le problème était sur google des informations d'identification de la page...j'ai créé un autre...et a résolu le problème....
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré ce problème quand je n'ai pas de demander explicitement de "hors connexion" accès lors de l'envoi à l'utilisateur de l'authentification OAuth "voulez-vous donner à cette application la permission de la toucher votre truc?" de la page.
Assurez-vous de spécifier access_type=hors ligne dans votre demande.
Plus de détails ici: https://developers.google.com/accounts/docs/OAuth2WebServer#offline
(Aussi: je pense que Google a ajouté cette restriction à la fin de 2011. Si vous avez de vieux jetons de avant, alors vous aurez besoin d'envoyer à vos utilisateurs de la page d'autorisation pour autoriser une utilisation hors connexion.)
access_type
àoffline
, cette erreur se produit toujours.J'ai rencontré ce même problème malgré de préciser le "hors ligne"
access_type
dans ma demande comme par bonkydog de réponse. Longue histoire courte, j'ai trouvé que la solution décrite ici a fonctionné pour moi:https://groups.google.com/forum/#!topic/google-analytics-données-exportation-api/4uNaJtquxCs
En substance, lorsque vous ajoutez un OAuth2 Client dans votre API Google la console de Google vous donnera un "Client ID" et un "adresse Mail" (en supposant que vous sélectionnez "webapp" comme type de client). Et en dépit de Google trompeuse conventions de nommage, ils attendent de vous que vous envoyer "Email address" en tant que la valeur de la
client_id
paramètre lorsque vous accédez à leurs OAuth2 de l'API.Cela s'applique lors de l'appel de ces deux URL:
Noter que l'appel à la première URL réussir si vous l'appelez avec votre "Client ID" à la place de votre "adresse Email". Cependant, en utilisant le code retourné à partir de cette demande ne fonctionnera pas lorsque vous tentez d'obtenir un porteur de jeton à partir de la deuxième URL. Au lieu de cela, vous obtiendrez une Erreur " 400 " et un "invalid_grant" message.
client_id
avec l'email de l'utilisateur donne uninvalid_client
erreur. Cette réponse semble dépassée.Bien que c'est une vieille question, il semble que de nombreux toujours le rencontrez - nous avons passé des jours et des jours de suivi de cette baisse de nous-mêmes.
Dans le OAuth2 spec, "invalid_grant" est une sorte de fourre-tout pour toutes les erreurs liées à la non valide ou a expiré/révocation des jetons (auth subvention ou à l'actualisation de jeton).
Pour nous, le problème était double:
Utilisateur a activement révoqué l'accès à notre application
Du bon sens, mais voilà: les 12 heures après la révocation, Google arrête d'envoyer des le message d'erreur dans leur réponse:
“error_description” : “Token has been revoked.”
C'est plutôt trompeur, parce que vous allez supposer que le message d'erreur est là en permanence, ce qui n'est pas le cas. Vous pouvez vérifier si votre application a toujours accès à la apps page d'autorisation de.
Utilisateur a reset/récupéré leur mot de passe Google
En décembre 2015, Google a changé leur comportement par défaut de sorte que les réinitialisations de mot de passe pour les non-utilisateurs de Google Apps automatiquement révoquer tous les utilisateurs des applications d'actualisation des jetons. Sur la révocation, le message d'erreur suit la même règle que le cas avant, de sorte que vous obtenez seulement les "error_description" dans les 12 premières heures. Il ne semble y avoir aucun moyen de savoir si l'utilisateur manuellement révoqué l'accès (intentful) ou c'est arrivé à cause d'une réinitialisation de mot de passe (effet secondaire).
En dehors de ces, il y a une multitude d'autres causes potentielles qui pourraient déclencher d'erreur:
J'ai écrit un court article résumant chaque élément avec un peu de débogage des conseils pour les aider à trouver le coupable. Espérons que cela aide.
J'ai rencontré le même problème. Pour moi, j'ai fixé ce, en utilisant l'Adresse e-Mail (la chaîne qui se termine par [email protected]) au lieu de l'ID Client pour client_id valeur de paramètre. La désignation par Google est une source de confusion ici.
J'ai eu le même message d'erreur "invalid_grant" et c'est parce que l'
authResult['code']
envoyer du côté client en javascript n'a pas été reçu correctement sur le serveur.
Essayez de sortie de retour sur le serveur pour voir si c'est correct et pas une chaîne vide.
Mon problème est que j'ai utilisé cette URL:
Quand j'aurais utilisé cette URL:
C'était le test d'un compte de service qui voulait l'accès hors connexion à l' Moteur de stockage.
si vous utilisez scribe de la bibliothèque, il suffit de configurer le mode hors-ligne, comme suggéré bonkydog
voici le code:
https://github.com/codolutions/scribe-java/
À l'aide d'un Android clientId (pas de client_secret) j'ai l'erreur suivante se produit de réaction:
Je ne trouve aucune documentation pour le champ 'code_verifier' mais j'ai découvert que si vous définissez des valeurs égales dans la demande d'autorisation et jeton de demandes, il va supprimer cette erreur. Je ne suis pas sûr de ce que la valeur doit être ou si il doit être sécurisé. Il a une certaine longueur minimale (16? caractères), mais j'ai trouvé la mise à
null
fonctionne également.Je suis en utilisant AppAuth pour la demande d'autorisation dans mon client Android qui a un
setCodeVerifier()
fonction.Voici un exemple de demande de jeton au noeud:
J'ai testé et cela fonctionne avec les deux
https://www.googleapis.com/oauth2/v4/token
ethttps://accounts.google.com/o/oauth2/token
.Si vous utilisez
GoogleAuthorizationCodeTokenRequest
à la place:C'est une réponse idiote, mais le problème pour moi est que j'ai échoué à réaliser que j'avais déjà émis un actif jeton oAuth pour mon utilisateur google qui je n'ai pas réussi à stocker. La solution dans ce cas est d'aller à l'api de la console et de réinitialiser la clé secrète client.
Il existe de nombreuses autres réponses sur DONC, à cet effet, par exemple
Client de réinitialisation de Secret OAuth2 - Faire, les clients ont besoin de ré-autoriser l'accès?
Vous pourriez avoir à supprimer un obsolètes ou invalides OAuth réponse.
De crédit: node.js google oauth2 échantillon cessé de travailler invalid_grant
Note: OAuth réponse sera également devenir invalide si le mot de passe utilisé dans l'autorisation initiale a été modifiée.
Si dans un environnement bash, vous pouvez utiliser la commande suivante pour supprimer le obsolètes réponse:
rm /Users/<username>/.credentials/<authorization.json>
Il y a deux raisons principales pour l' invalid_grant d'erreur qui vous devez prendre soin avant la requête POST pour Actualiser Jeton Jeton d'Accès.
RFC 6749 OAuth 2.0 défini invalid_grant que:
La demande d'autorisation de subvention (par exemple, le code d'autorisation, de ressources propriétaire des informations d'identification) ou à l'actualisation de jeton est invalide, expiré, révoqué, ne correspond pas à la redirection URI utilisé dans la demande d'autorisation, ou a été prise à un autre client.
J'ai trouvé un autre bon article, ici, vous trouverez de nombreuses autres raisons pour cette erreur.
https://blog.timekit.io/google-oauth-invalid-grant-nightmare-and-how-to-fix-it-9f4efaf1da35
dans ce site
console.developers.google.com
cette console de bord sélectionnez votre projet d'entrée de la prestation de serment de l'url.
oauth callback url de redirection lors de l'oauth succès
Après avoir examiné et essayé tous les autres moyens, voici comment j'ai résolu le problème en nodejs avec le
googleapis
module en collaboration avec lerequest
module, que j'ai utilisé pour récupérer les jetons au lieu de la conditiongetToken()
méthode:- Je simplement utiliser
request
pour faire la demande d'api via HTTP, comme décrit ici:https://developers.google.com/identity/protocols/OAuth2WebServer#offline
Essayez de changer votre url de requête à
Pour l'avenir les gens... j'ai lu beaucoup d'articles et de blogs mais eu de la chance avec la solution ci-dessous...
Cette blog représente les différents cas dans lesquels "invalid_grant" erreur vient.
Profitez-en!!!
pour moi, j'ai dû faire en sorte que le
redirect_uri
correspondent exactement à celle de la console développeurAuthorised redirect URIs
, qu'il fixe pour moi, j'ai été en mesure de débogage et de savoir quel était exactement le problème après le passage de l'https://accounts.google.com/o/oauth2/token
àhttps://www.googleapis.com/oauth2/v4/token
J'ai reçu un bon d'erreur:
J'ai eu ce problème après l'activation d'un nouveau service API Google console et l'utilisation de la déjà fait des informations d'identification.
Pour résoudre le problème, j'ai dû revenir à la page d'informations d'identification, en cliquant sur le nom d'identification, et en cliquant sur "Enregistrer" nouveau. Après cela, j'ai pu authentifier l'amende juste.
Dans mon cas, le problème dans mon code. Par erreur j'ai essayé de lancer le client 2 fois avec la même jetons. Si aucune des réponses ci-dessus aidé assurez-vous de ne pas générer des 2 instances du client.
Mon code avant de le fixer:
dès que je l'ai changer pour (utiliser seulement un exemple):
il fixe mes questions avec type de subvention.
Pour moi la j'ai eu plusieurs clients dans mon projet, et je suis assez sûr que c'est parfaitement correct, mais j'ai supprimé tous les client pour ce projet et a créé un nouveau et a tous commencé à travailler pour moi ( Eu cette idée bof WP_SMTP plugin forum de support) je ne suis pas en mesure de trouver ce lien pour référence