444 votes

Google OAuth 2 autorisation - Erreur : redirect_uri_mismatch

Sur le site web https://code.google.com/apis/console j'ai enregistré mon application, configuré les Client ID: et Client Secret générés pour mon application, et j'ai essayé de me connecter avec Google. Malheureusement, j'ai reçu le message d'erreur :

Erreur : redirect_uri_mismatch
L'URI de redirection dans la requête : http://127.0.0.1:3000/auth/google_oauth2/callback ne correspondait pas à une URI de redirection enregistrée

scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback
access_type=offline
approval_prompt=force
client_id=generated_id

Que signifie ce message, et comment puis-je le corriger? J'utilise le gem omniauth-google-oauth2.

1 votes

Pour toute personne rencontrant ce problème, notez que vous pouvez résoudre ce problème en accédant à une URL comme https://accounts.google.com/o/oauth2/auth?client_id={client_id}&response_type=token&redirect_uri={redirect_uri}&scope={scope} dans un navigateur, au lieu de lancer votre application entière pour tester.

0 votes

J'ai remarqué que google lie automatiquement redirect_uri entre guillemets doubles dans (redirect_uri="whatever") ci-dessus url, et provoque cette erreur. Si je supprime ces guillemets doubles, je peux passer à l'écran suivant. Maintenant, comment pouvons-nous éviter ces guillemets doubles, puisqu'ils sont automatiquement ajoutés par google lui-même.

447voto

Steve Bazyl Points 3314

Le URI de redirection (où la réponse est renvoyée) doit être enregistré dans la console des APIs, et l'erreur indique que vous ne l'avez pas fait, ou que vous ne l'avez pas fait correctement.

Allez dans la console de votre projet et regardez sous Accès à l'API. Vous devriez voir votre identifiant client et secret client là-bas, ainsi qu'une liste d'URI de redirection. Si l'URI que vous souhaitez n'est pas répertoriée, cliquez sur modifier les paramètres et ajoutez l'URI à la liste.

EDIT : (D'après un commentaire très bien noté ci-dessous) Notez que la mise à jour de la console Google api et que ce changement soit présent peut prendre un certain temps. Généralement seulement quelques minutes mais parfois cela semble plus long.

12 votes

Il y a une sorte de magie, car quand j'ai essayé le même rappel il y a une heure, ça ne marchait pas, mais maintenant ça marche. En tout cas, merci!

0 votes

Je l'ai bien enregistré, ce n'est pas le problème

374 votes

Je suis tombé sur un problème similaire et je voulais noter que la mise à jour de la console API de Google et le temps nécessaire pour que ce changement soit effectif peuvent prendre un certain temps. En général, cela ne prend que quelques minutes, mais parfois cela semble plus long.

107voto

Mike Keskinov Points 2890

Si vous utilisez le bouton javascript Google+, vous devez utiliser postmessage au lieu de l'URI réel. Il m'a fallu presque toute la journée pour comprendre cela car la documentation de Google ne le précise pas clairement pour une raison quelconque.

8 votes

Depuis cette question est le premier résultat lorsque vous googlez le message d'erreur, voici quelques pointeurs supplémentaires. Comme le dit Mike, utilisez "postmessage" pour votre URI de redirection. Vous devez spécifier ceci à 2 endroits (si vous utilisez le flux du serveur d'application web). L'un est dans le bouton de connexion g-signin sur le javascript. L'autre est dans le client d'autorisation de signet dans votre code serveur.

0 votes

Excellente réponse. Je postais avec javascript et j'avais besoin de définir 'oauth2_redirect_uri' => 'postmessage' dans le fichier config.php de l'API Google.

0 votes

Je n'ai pas la force de découvrir ce que "postmessage" en tant qu'uri de redirection (wtf?) signifie, mais tu m'as sauvé ! merci!

49voto

Pour mon application web, j'ai corrigé mon erreur en écrivant

au lieu de : http://localhost:11472/authorize/
type :      http://localhost/authorize/

0 votes

Merci pour le partage, cela aide. J'étais bloqué sur cela parce que l'API OAuth2 de GitHub ne nécessite pas de supprimer le numéro de port.

0 votes

Cela a également fonctionné pour moi. Je suivais ce cours : asp.net/mvc/overview/security/… et j'obtenais une erreur d'« uri de redirection ». Après avoir modifié localhost:44334/signin-google en localhost/signin-google, cela a fonctionné. Merci beaucoup pour ce conseil utile.

2 votes

Merci beaucoup. Je faisais des tests avec ce github.com/google/google-api-dotnet-client-samples and "Le URI de redirection dans la demande" semblait provenir d'un port différent à chaque fois que je l'exécutais. Cela m'a beaucoup aidé. Cela m'aurait pris des heures pour comprendre ce qui se passait!

34voto

Chintan Points 103

Vérifiez bien le protocole "http://" ou "https://" car Google vérifie également le protocole. Il est préférable d'ajouter les deux URL dans la liste.

2 votes

Non, il vaut mieux s'assurer d'utiliser https.

6voto

Kathir Points 504

Lorsque vous enregistrez votre application sur https://code.google.com/apis/console et créez un identifiant client, vous avez la possibilité de spécifier un ou plusieurs URI de redirection. La valeur du paramètre redirect_uri sur votre URI d'authentification doit correspondre exactement à l'un d'entre eux.

0 votes

Et c'est avec très domaine qui a des problèmes pour des liens Angular profonds car Google n'est pas d'accord [[landed1.github.io/videos.html#/oauth2callback]est](http://landed1.github.io/videos.html#/oauth2callback]est) une URL valide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X