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 .
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.
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 ethttps://
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.
Sélectionnez votre projet
- cliquez sur l'icône du menu
- cliquez sur
API Manager
menu
- cliquez sur
Credentials
menu. Et sousOAuth 2.0 Client IDs
, vous trouverez le nom de votre client. Dans mon cas, c'estWeb Client 1
. Cliquez dessus et un popup apparaîtra où vous pouvez éditer autorisé Javascript Origine et Redirect URIs autorisé .
voici un article de Google sur création de projet et ID client .
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.
pour mon application web j'ai corrigé mon erreur en écrivant
instead of : http://localhost:11472/authorize/
type : http://localhost/authorize/
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.
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
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é.
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>
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.
Liste de contrôle:
-
http
ouhttps
? -
&
ou&
? - 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.
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
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 "/"
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
.
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.
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,
}
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...
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
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.
méfiez-vous de l'extra /
à la fin de l'url
http://localhost:8000
est différent de http://localhost:8000/
Essayer de faire ces vérifications:
- 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} "
- 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
- en console à cloud.google.com "APIs & auth" - > "écran de consentement" remplir le formulaire à propos de votre demande. "Produit name" est un champ obligatoire.
Enjoy :)
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:]
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.
n'oubliez pas d'inclure le chemin après votre domaine et votre ip. Dans mon cas, j'ai oublié:
/ oauth2callback
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.
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
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.
mise à JOUR --> TRAVAIL pour les applications Android
il suffit d'utiliser:
si vous gérez votre propre logique sans lien de redirection pour les applications web