Sur le site Web https://code.google.com/apis/console, j'ai enregistré mon application, configuré l' identifiant client généré et le secret client pour mon application et essayé de me connecter avec Google. Malheureusement, j'ai reçu le message d'erreur:
Error: redirect_uri_mismatch
The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI
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 la gemme omniauth-google-oauth2 .
authentication
oauth-2.0
google-signin
user984621
la source
la source
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 d'exécuter l'intégralité de votre application à tester.Réponses:
L'URI de redirection (où la réponse est renvoyée) doit être enregistré dans la console des API et l'erreur indique que vous ne l'avez pas fait ou que vous ne l'avez pas fait correctement.
Accédez à la console de votre projet et regardez sous API Access. Vous devriez voir votre
client ID
&client secret
là, ainsi qu'une liste d'URI de redirection. Si l'URI souhaité n'est pas répertorié, 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 la modification est présente peut prendre un certain temps. Généralement seulement quelques minutes mais parfois cela semble plus long.
la source
Dans mon cas, c'était
www
etnon-www
URL. Le site réel avait unewww
URL et les URI de redirection autorisés dans la console développeur de Google avaient unenon-www
URL. Par conséquent, il y avait un décalage dans l'URI de redirection. Je l'ai résolu en mettantAuthorized Redirect URIs
à jour dans Google Developer Console verswww
URL.D'autres incompatibilités d'URI courantes sont:
http://
dans les URI de redirection autorisés ethttps://
comme URL réelle, ou vice-versahttp://example.com/
) dans les URI de redirection autorisés et non de la barre oblique de fin (http://example.com
) comme URL réelle, ou vice-versaVoici les captures d'écran étape par étape de la console développeur de Google afin qu'il soit utile pour ceux qui ont du mal à localiser la page de la console développeur de mettre à jour les URI de redirection.
Voici un article Google sur la création d'ID de projet et de client .
la source
Si vous utilisez le bouton javascript Google+ , vous devez utiliser à la
postmessage
place de l'URI réel. Il m'a fallu presque toute la journée pour comprendre cela, car les documents de Google ne le précisent pas clairement pour une raison quelconque.la source
Error: invalid_request
origin parameter is required!
$client->setRedirectUri('postmessage');
au lieu de$client->setRedirectUri('http://your.url...');
Dans tout flux où vous avez récupéré un code d'autorisation côté client, tel que l'
GoogleAuth.grantOfflineAccess()
API , et maintenant vous souhaitez transmettre le code à votre serveur, le racheter et stocker les jetons d'accès et d'actualisation, vous devez alors utiliser la chaîne littéralepostmessage
au lieu de redirect_uri.Par exemple, en s'appuyant sur l'extrait de code dans la documentation Ruby :
La seule documentation Google à mentionner
postmessage
est cet ancien document de connexion à Google+ . Voici une capture d'écran et un lien d'archivage depuis la fermeture de G + et ce lien disparaîtra probablement:Il est absolument impardonnable que la page de documentation pour l'accès hors ligne ne le mentionne pas. #FacePalm
la source
postmessage
, mais je voulais donner les circonstances spécifiques (par exemplegrantOfflineAccess
) du moment où ce hack sans papiers fou était nécessaire pour moi. : PI ne voulait pas non plus que ce soit vrai. :) Ça m'a coûté des heures de maux de tête.Pour mon application web j'ai corrigé mon erreur en écrivant
la source
Assurez-vous de vérifier le protocole "http: //" ou "https: //" en tant que protocole de vérification Google également. Mieux vaut ajouter les deux URL dans la liste.
la source
Cela semble assez étrange et ennuyeux qu'aucune solution "unique" n'existe. pour moi, http: // localhost: 8000 n'a pas fonctionné mais http: // localhost: 8000 / a fonctionné.
la source
redirect_uri
doit être un MATCH EXACT sur la console des développeurs et dans votre application.Lorsque vous enregistrez votre application sur https://code.google.com/apis/console et créez un ID client, vous avez la possibilité de spécifier un ou plusieurs URI de redirection. La valeur du
redirect_uri
paramètre sur votre URI d'authentification doit correspondre exactement à l'un d'eux.la source
https://code.google.com/apis/console
ne soit plus valideCette réponse est la même que cette réponse de Mike , et la réponse de Jeff , les deux ensembles
redirect_uri
àpostmessage
côté client. Je veux ajouter plus sur le côté serveur, ainsi que sur les circonstances particulières s'appliquant à cette configuration.Tech Stack
Backend
L'extrémité avant
create-react-app
version 2.1.5Le flux "Code" (spécialement pour Google OAuth2)
Résumé: Réagissez -> demandez le "code" d'authentification sociale -> demandez le jeton jwt pour acquérir le statut de "connexion" en termes de votre propre serveur / base de données backend.
responseType="code"
pour obtenir un code d'autorisation. (ce n'est pas un jeton, pas un jeton d'accès!)react-google-login
mentionné ci-dessus.{ "provider": "google-oauth2", "code": "your retrieved code here", "redirect_uri": "postmessage" }
REST_SOCIAL_OAUTH_ABSOLUTE_REDIRECT_URI
,REST_SOCIAL_DOMAIN_FROM_ORIGIN
etREST_SOCIAL_OAUTH_REDIRECT_URI
dans Django nesettings.py
sont pas nécessaires . (Ce sont des constantes utilisées par Django REST Social Auth) En bref, vous n'avez rien à configurer pour rediriger l'url dans Django . Le"redirect_uri": "postmessage"
frontend in React suffit. Cela a du sens car le travail d'authentification sociale que vous avez à faire de votre côté est toute demande POST de style Ajax en frontend, ne soumettant aucun formulaire, donc en fait aucune redirection ne se produit par défaut. C'est pourquoi l'URL de redirection devient inutile si vous utilisez le flux code + JWT, et le paramètre d'URL de redirection côté serveur ne prend aucun effet.youremailprefix717e248c5b924d60
votre e-mail[email protected]
. Il ajoute une chaîne aléatoire pour créer un nom d'utilisateur unique. C'est le comportement par défaut, je pense que vous pouvez le personnaliser et n'hésitez pas à fouiller dans leur documentation.Authorization
tête et envoyez une demande au backend, le backend Django reconnaîtra maintenant cela comme une connexion, c'est-à-dire authentifié utilisateur. Bien sûr, si votre token expire, vous devez le rafraîchir en faisant une autre demande.Oh mon Dieu, j'ai passé plus de 6 heures et j'ai finalement compris! Je crois que c'est la première fois que je vois cette
postmessage
chose. Quiconque travaille sur uneDjango + DRF + JWT + Social Auth + React
combinaison va définitivement s'y planter. Je ne peux pas croire qu'aucun des articles ne le mentionne, sauf les réponses ici. Mais j'espère vraiment que ce message peut vous faire gagner beaucoup de temps si vous utilisez la pile Django + React.la source
2015juillet15 - la connexion qui fonctionnait la semaine dernière avec ce script lors de la connexion
a cessé de fonctionner et a commencé à provoquer l'erreur 400 avec
Error: redirect_uri_mismatch
et dans la section DÉTAILS:
redirect_uri=storagerelay://...
je l'ai résolu en changeant pour:
la source
Liste de contrôle:
http
ouhttps
?&
ou&
?/
) ou ouverte?
(CMD/CTRL)+F
, recherchez la correspondance exacte dans la page d'informations d'identification. S'il n'est pas trouvé, recherchez celui qui manque.la source
Dans mon cas, mon type de demande d'informations d'identification est "Autre". Je ne trouve donc pas
Authorized redirect URIs
sur la page d'informations d'identification. Il apparaît dans Type d'application: "Application Web". Mais vous pouvez cliquer sur leDownload JSON
bouton pour obtenir leclient_secret.json
fichier.Ouvrez le fichier JSON, et vous pouvez trouver le paramètre comme ceci:
"redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
. J'ai choisi d'utiliser http: // localhost et cela fonctionne bien pour moi.la source
L'URL de redirection est sensible à la casse.
Dans mon cas, j'ai ajouté les deux: http: // localhost: 5023 / AuthCallback / IndexAsync http: // localhost: 5023 / authcallback / indexasync
la source
Aucune des solutions ci-dessus n'a fonctionné pour moi. ci-dessous
changer les URL de redirection autorisées en - https: // localhost: 44377 / signin-google
J'espère que cela aide quelqu'un.
la source
méfiez-vous du supplément
/
à la fin de l'urlhttp://localhost:8000
est différent dehttp://localhost:8000/
la source
Utilisateurs de Rails (à partir des documents omniauth-google-oauth2 ):
N'OUBLIEZ PAS: N'incluez pas le "/" de fin
la source
Si vous utilisez ce didacticiel: https://developers.google.com/identity/sign-in/web/server-side-flow, vous devez utiliser "postmessage".
Dans GO, cela a résolu le problème:
la source
pour moi, c'était parce que dans la liste «URI de redirection autorisée», j'ai incorrectement mis à la
https://developers.google.com/oauthplayground/
place dehttps://developers.google.com/oauthplayground
(sans/
à la fin).la source
Permettez-moi de compléter la réponse de @ Bazyl: dans le message que j'ai reçu, ils ont mentionné l'URI
"http://localhost:8080/"
(qui, bien sûr, semble être une configuration interne de Google). J'ai changé l'URI autorisé pour celui-ci,"http://localhost:8080/"
et le message n'apparaissait plus ... Et la vidéo a été téléchargée ... La documentation APIS est TRÈS boiteuse ... Chaque fois que j'ai quelque chose qui fonctionne avec Google Apis, je simplement se sentir "chanceux", mais il y a un manque de bonne documentation à ce sujet .... :( Oui, je l'ai fait fonctionner, mais je ne comprends pas encore pourquoi il a échoué, ni pourquoi cela a fonctionné ... Il n'y en avait qu'un endroit pour confirmer l'URI sur le Web, et il a été copié dans le client_secrets.json ... Je ne reçois pas s'il y a un TROISIÈME endroit où l'on devrait écrire le même URI ... Je ne trouve pas seulement la documentation mais aussi le Conception graphique de Google 'la source
Quiconque a du mal à trouver où définir les URL de redirection dans la nouvelle console: API et authentification -> Informations d'identification -> ID client OAuth 2.0 -> Cliquez sur le lien pour trouver toutes vos URL de redirection
la source
Je devais créer un nouvel ID client sous API et services -> Informations d'identification -> Créer des informations d'identification -> OAuth -> Autre
Ensuite, j'ai téléchargé et utilisé le client_secret.json avec mon programme de ligne de commande qui télécharge sur mon compte youtube. J'essayais d'utiliser un ID client OAuth Web App qui me donnait l'erreur URI de redirection dans le navigateur.
la source
Essayez de faire ces vérifications:
Prendre plaisir :)
la source
Dans mon cas, j'ai dû vérifier le type d'ID client pour les applications Web / applications installées.
applications installées: http: // localhost [URI de redirection] Dans ce cas, localhost fonctionne simplement
applications Web: vous avez besoin d'un nom de domaine valide [URI de redirection:]
la source
Ce que vous devez faire, c'est retourner dans votre console développeur et aller dans APIs & Auth> Écran de consentement et le remplir. Plus précisément, le nom du produit.
la source
N'oubliez pas d'inclure le chemin après votre domaine et votre ip. Dans mon cas, j'ai oublié:
/ oauth2callback
la source
J'ai eu deux URI de demande dans la console, http: // xxxxx / client / api / spreadsheet / authredirect et http: // localhost .
J'ai essayé toutes les meilleures réponses à cette question et confirmé qu'aucun d'entre eux n'était mon problème.
J'ai supprimé localhost de la console, mis à jour mon client_secret.json dans mon projet et l'erreur de non-concordance a disparu.
la source
J'ai eu le même problème avec la connexion à Google, j'étais sur le point de me tirer les cheveux !!! J'avais correctement entré mes rappels dans le panneau Google Credential sur la console développeur de Google, voici mes URL de redirection:
https://www.example.com/signin-google
https://www.example.com/signin-google/
https://www.example.com/oauth2callback
https://www.example.com/oauth2callback/
tout semble bien non? mais il n'a toujours pas de travail jusqu'à ce que j'ajouté un plus magique Url j'ai ajouté signin-google url (qui est rappel par défaut de Google) sans www et problème résolu.
en tenir compte (en fonction de votre domaine) vous pouvez ou non avoir besoin d'ajouter à la fois avec et sans URL www
la source
J'ai l'application frontend et l'api backend.
À partir de mon serveur principal, je testais en appuyant sur Google api et je faisais face à cette erreur. Pendant tout mon temps, je me demandais pourquoi devrais-je devoir donner
redirect_uri
car ce n'est que le backend, pour le front, cela a du sens.Ce que je faisais était différent
redirect_uri
(bien que valide) du serveur (en supposant que ce soit juste un espace réservé, il n'a qu'à être enregistré sur google) mais mon URL frontale qui a créé le code du jeton était différente. Donc, lorsque je passais ce code dans mes tests côté serveur (pour lesquels redirect-uri était différent), j'étais confronté à cette erreur.Alors ne faites pas cette erreur. Assurez-vous que votre frontend
redirect_uri
est le même que celui de votre serveur car Google l'utilise pour valider l'authenticité.la source
Voici les raisons de l'erreur: le problème de redirect_uri_mismatch se produit:
Recommandé d'utiliser l'URL du domaine
la source
L'astuce consiste à saisir l'URL de redirection appropriée au moment de la création de l'ID. J'ai trouvé que la mise à jour de l'URL de redirection une fois l'ID créé via un "Modifier" ne fait tout simplement pas le travail. Ce qui a également fonctionné pour moi, c'est de dupliquer l'intégralité du dossier `` fournisseur '' et de le copier au même emplacement où se trouve le fichier `` oauth '' (jusqu'à ce que vous ayez réussi à générer le jeton et que vous puissiez ensuite supprimer le dossier `` fournisseur '' en double). En effet, essayer de pointer vers le dossier du fournisseur via «../vendor/autoload» n'a pas fonctionné pour moi.
Donc, supprimez votre ID OAuth client problématique existant et essayez cette approche, cela fonctionnera.
la source