Autorisation Google OAuth 2-Erreur: rediriger l'erreur uri

sur le site https://code.google.com/apis/console j'ai enregistré mon application, mis en place généré ID Client: et Secret Client à mon application et essayé de se 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 le gem omniauth-google-oauth2 .

302
demandé sur guaka 2012-07-14 20:08:02

26 réponses

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

allez à la console pour votre projet et regardez sous accès API. Vous devriez voir votre ID de client et secret là, avec une liste D'URIs de redirection. Si L'URI que vous voulez n'est pas listé, cliquez sur Modifier les paramètres et ajoutez L'URI à la liste.

295
répondu Steve Bazyl 2012-07-14 16:57:15

dans mon cas, C'était www et non-www URL. Le site réel avait www URL et le URIs de redirection autorisée dans Google Developer Console avait non-www URL. Par conséquent, il y avait une inadéquation dans L'URI de redirection. Je l'ai résolu en mettant à jour Authorized Redirect URIs dans Google Developer Console à www URL.

les autres anomalies URI courantes sont:

  • utilisant http:// dans les URIs de redirection autorisés et https:// comme URL réelle, ou vice-versa
  • utilisant la barre oblique de queue ( http://example.com/ ) dans L'URIs de redirection autorisé et n'utilisant pas la barre oblique de queue ( http://example.com ) comme URL réelle, ou vice-versa

Voici les captures d'écran étape par étape de Google Developer Console afin qu'il soit utile pour ceux qui ont des difficultés à localiser la page developer console pour mettre à jour L'URIs de redirection.

  1. passer à https://console.developers.google.com

  2. Sélectionnez votre projet

Select your Project

  1. cliquez sur l'icône du menu

Click on the menu icon

  1. cliquez sur API Manager menu

Select API Manager menu

  1. cliquez sur Credentials menu. Et sous OAuth 2.0 Client IDs , vous trouverez le nom de votre client. Dans mon cas, c'est Web Client 1 . Cliquez dessus et un popup apparaîtra où vous pouvez éditer autorisé Javascript Origine et Redirect URIs autorisé .

Select Credentials menu

voici un article de Google sur création de projet et ID client .

76
répondu Mukesh Chapagain 2016-02-17 15:56:57

si vous utilisez Google+ le bouton javascript , alors vous devez utiliser postmessage au lieu de L'URI réel. Il m'a fallu presque toute la journée pour comprendre cela depuis Google docs ne sont pas clairement état pour une raison quelconque.

74
répondu Mike Keskinov 2015-05-19 03:51:30

pour mon application web j'ai corrigé mon erreur en écrivant

instead of : http://localhost:11472/authorize/
type :      http://localhost/authorize/
35
répondu Guven Sezgin Kurt 2014-10-19 06:59:21

assurez-vous de vérifier le protocole "http://" ou "https://" que google vérifie protocole. Il est préférable d'ajouter les deux URL dans la liste.

29
répondu Chintan 2014-02-12 13:48:40

dans n'importe quel flux où vous avez récupéré un code d'autorisation du côté du client, comme le GoogleAuth.grantOfflineAccess() API , et maintenant vous voulez passer le code à votre serveur, le racheter, et stocker l'accès et rafraîchir les jetons, alors vous devez utiliser la chaîne littérale postmessage au lieu de la redirect_uri.

par exemple, bâtiment sur le snippet dans le Ruby doc :

client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json')
auth_client = client_secrets.to_authorization
auth_client.update!(
  :scope => 'profile https://www.googleapis.com/auth/drive.metadata.readonly',
  :redirect_uri => 'postmessage' # <---- HERE
)

# Inject user's auth_code here:
auth_client.code = "4/lRCuOXzLMIzqrG4XU9RmWw8k1n3jvUgsI790Hk1s3FI"
tokens = auth_client.fetch_access_token!
# { "access_token"=>..., "expires_in"=>3587, "id_token"=>..., "refresh_token"=>..., "token_type"=>"Bearer"}

la seule documentation Google à même mentionner postmessage est ce Ancien Google+ sign-in doc . Il est absolument impardonnable que la page doc POUR ACCÈS HORS LIGNE ne mentionne pas cela. # FacePalm

8
répondu Jeff Ward 2018-01-05 20:51:44

cela semble assez étrange et ennuyeux qu'il n'y ait pas de solution" unique". pour moi http://localhost:8000 n'a pas fonctionné, mais http://localhost:8000/ travaillé.

7
répondu arshpreet 2015-06-03 15:16:11

2015July15-la signature qui fonctionnait la semaine dernière avec ce script sur la connexion

<script src="https://apis.google.com/js/platform.js" async defer></script>

a cessé de fonctionner et a commencé à causer une erreur 400 avec Error: redirect_uri_mismatch

et dans la section "Détails": redirect_uri=storagerelay://...

je l'ai résolu en changeant de:

<script src="https://apis.google.com/js/client:platform.js?onload=startApp"></script>
5
répondu tony gil 2015-09-03 20:19:49

lorsque vous enregistrez votre application à https://code.google.com/apis/console et créer un ID Client, vous avez la possibilité de spécifier une ou plusieurs redirection URIs. La valeur du paramètre redirect_uri sur votre auth URI doit l'un d'eux correspond exactement.

5
répondu Kathir 2015-09-10 06:17:15

Liste de contrôle:

  • http ou https ?
  • & ou &amp; ?
  • slash arrière ( / ) ou ouvrir ?
  • (CMD/CTRL)+F , rechercher la correspondance exacte dans la page de justificatifs. Si pas trouvé alors cherchez le disparu.
  • attendez que google le rafraîchisse. Peut se produire dans chaque demi-heure si vous changent fréquemment ou il peut rester dans la piscine. Pour mon cas, c'était presque une demi-heure pour prendre effet.
3
répondu itsazzad 2016-02-16 09:07:52

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

3
répondu h3n 2016-09-28 09:42:16

utilisateurs de Rails (à partir du omniauth-google-oauth2 docs):

Fixation Protocole Incompatibilité de redirect_uri dans les Rails

vient de définir le full_host dans OmniAuth basé sur les Rails.env.

# config/initializers / omniauth.rb

OmniAuth.config.full_host = Rails.env.la production? ? " https://domain.com ' : ' http://localhost:3000 "

RAPPELEZ-vous: Ne pas inclure la fin "/"

2
répondu brntsllvn 2016-02-23 03:48:03

dans mon cas, mon type de demande d'attestation est"autre". Donc je ne trouve pas Authorized redirect URIs dans la page d'accréditation. Il semble apparaît dans le type D'Application:"Web application". Mais vous pouvez cliquer sur le bouton Download JSON pour obtenir le fichier client_secret.json . enter image description here

Ouvrir le fichier json, et vous pouvez trouver le paramètre comme ceci: "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"] . Je choisis d'utiliser http://localhost et ça marche très bien pour moi.

2
répondu codezjx 2016-03-12 05:31:04

si vous utilisez ce tutoriel: https://developers.google.com/identity/sign-in/web/server-side-flow alors vous devez utiliser "postmessage".

ALLEZ le problème est résolu:

confg = &oauth2.Config{
        RedirectURL:  "postmessage",
        ClientID:   ...,
        ClientSecret: ...,
        Scopes:      ...,
        Endpoint:     google.Endpoint,
}
2
répondu Janek Olszak 2017-06-04 18:03:15

laissez-moi compléter la réponse de @Bazyl: dans le message que j'ai reçu, ils ont mentionné L'URI "http://localhost:8080/" (ce qui, bien sûr, semble une configuration interne de google). J'ai changé L'URI autorisée pour celui-là., "http://localhost:8080/" , et le message n'est plus apparu... Et la vidéo à été mis à jour... La documentation APIS est très boiteuse... Chaque fois que j'ai quelque chose qui fonctionne avec google apis, je me sens simplement "chanceux", mais il y a un manque de bonne documentation à ce sujet.... :( Oui, j'ai eu de travail, mais je ne comprends pas encore pourquoi il a échoué, ni pourquoi il a fonctionné... Il n'y avait QU'un seul endroit pour confirmer L'URI dans le web, et il a été copié dans le client_secrets.json... Je ne comprends pas s'il y a un troisième endroit où on devrait écrire la même URI... Je ne trouve pas seulement la documentation, mais aussi le design graphique de L'api de Google tout à fait boiteux...

1
répondu David L 2014-08-22 14:39:09

toute personne qui a du mal à trouver où définir des URL de redirection dans la nouvelle console: APIs & Auth - > Credentials - > OAuth 2.0 client IDs - > cliquez sur le lien pour trouver toutes vos URL de redirection

1
répondu Steji 2015-10-21 11:37:58

aucune des solutions ci-dessus n'a fonctionné pour moi. ci-dessous a fait

modifier les urls de redirection autorisées pour - https://localhost:44377/signin-google

J'espère que ça aidera quelqu'un.

1
répondu Dheeraj Palagiri 2016-11-04 14:54:38

méfiez-vous de l'extra / à la fin de l'url http://localhost:8000 est différent de http://localhost:8000/

1
répondu wolfgang 2017-07-12 07:22:14

Essayer de faire ces vérifications:

  1. Bundle ID dans la console et dans votre application. Je préfère set Bundle ID d'application comme ceci " org.peredovik.${Nom du produit: rfc1034identifier} "
  2. vérifiez si vous avez ajouté des types D'URL à l'information de l'onglet tapez juste votre ID de faisceau dans les schémas D'identification et D'URL, le rôle défini à L'éditeur
  3. en console à cloud.google.com "APIs & auth" - > "écran de consentement" remplir le formulaire à propos de votre demande. "Produit name" est un champ obligatoire.

Enjoy :)

0
répondu Vlad 2014-01-02 16:49:50

dans mon cas, j'ai dû vérifier le type D'identification du Client pour les applications web/les applications installées.

applications installées: http://localhost [Redirect Uri] Dans ce cas localhost fonctionne tout simplement

applications web: vous avez besoin d'un nom de domaine valide [Redirect URIs:]

0
répondu Bhuwan Gautam 2015-04-04 13:04:14

ce que vous devez faire, c'est retourner à votre Console de développement et aller à L'écran APIs & Auth > Consent Screen et remplir cela. Plus précisément, le nom du produit.

0
répondu Satnam Sync 2015-06-10 08:15:01

n'oubliez pas d'inclure le chemin après votre domaine et votre ip. Dans mon cas, j'ai oublié:

/ oauth2callback

0
répondu Matrym 2016-11-19 01:05:23

j'avais deux URIs de demande dans la Console, http://xxxxx/client/api/spreadsheet/authredirect et http://localhost .

j'ai essayé toutes les réponses les plus élevées à cette question et j'ai confirmé qu'aucune d'elles 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 discordance a disparu.

0
répondu paul 2017-04-12 12:59:43

j'ai eu le même problème avec google s'inscrire, j'étais sur le point de tirer mes cheveux!!! J'avais correctement entré mes callbacks dans le panneau de justificatifs google à la console de développeur google voici mes urls 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 va bien, non? mais il n'a toujours pas fonctionné jusqu'à ce que j'ai ajouté un de plus URL magique j'ai ajouté signe-google url (qui est par défaut google callback) sans www et Problème résolu.

en tenir compte (en fonction de votre domaine) vous pouvez ou peut ne pas avoir besoin d'ajouter à la fois avec et sans URLs www

0
répondu Code_Worm 2017-10-17 08:07:23

j'avais besoin de créer un nouvel ID client sous API & Services -> Credentials - > Create credentials -> OAuth - > Other

puis j'ai téléchargé et utilisé le client_secret.json avec mon programme de ligne de commande qui est en train de télécharger sur mon compte youtube. J'essayais d'utiliser un ID client D'application Web qui me donnait L'erreur URI de redirection dans le navigateur.

0
répondu James T. 2017-12-29 00:41:32

mise à JOUR --> TRAVAIL pour les applications Android

il suffit d'utiliser:

http://localhost/oauth2callback

si vous gérez votre propre logique sans lien de redirection pour les applications web

-3
répondu Choletski 2017-09-21 06:29:55