Auf der Website https://code.google.com/apis/console habe ich meine Anwendung registriert, die generierte Client-ID und das Client-Geheimnis für meine App eingerichtet und versucht, mich bei Google anzumelden. Leider habe ich die Fehlermeldung bekommen:
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
Was bedeutet diese Nachricht und wie kann ich sie beheben? Ich benutze das Juwel omniauth-google-oauth2 .
authentication
oauth-2.0
google-signin
user984621
quelle
quelle
https://accounts.google.com/o/oauth2/auth?client_id={client_id}&response_type=token&redirect_uri={redirect_uri}&scope={scope}
in einem Browser zugreifen , anstatt Ihre gesamte App zum Testen auszuführen.Antworten:
Der Umleitungs-URI (an den die Antwort zurückgegeben wird) muss in der API-Konsole registriert sein, und der Fehler zeigt an, dass Sie dies nicht oder nicht richtig getan haben.
Gehen Sie zur Konsole für Ihr Projekt und suchen Sie unter API-Zugriff. Sie sollten Ihr
client ID
&client secret
dort zusammen mit einer Liste von Umleitungs-URIs sehen. Wenn der gewünschte URI nicht aufgeführt ist, klicken Sie auf Einstellungen bearbeiten und fügen Sie den URI zur Liste hinzu.BEARBEITEN: (Aus einem hoch bewerteten Kommentar unten) Beachten Sie, dass das Aktualisieren der Google API-Konsole und das Vorhandensein von Änderungen einige Zeit dauern kann. Im Allgemeinen nur ein paar Minuten, aber manchmal scheint es länger.
quelle
In meinem Fall war es
www
undnon-www
URL. Die tatsächliche Website hatte einewww
URL und die URIs für autorisierte Weiterleitungen in der Google Developer Console hatten einenon-www
URL. Daher gab es eine Nichtübereinstimmung in der Umleitungs-URI. Ich habe es gelöst, indem ichAuthorized Redirect URIs
in der Google Developer Console aufwww
URL aktualisiert habe .Andere häufige URI-Fehlanpassungen sind:
http://
in autorisierten Umleitungs-URIs undhttps://
als tatsächliche URL oder umgekehrthttp://example.com/
) in URIs für autorisierte Umleitungen und nicht von abschließendem Schrägstrich (http://example.com
) als tatsächliche URL oder umgekehrtHier sind die schrittweisen Screenshots von Google Developer Console, damit es für diejenigen hilfreich ist, die Schwierigkeiten haben, die Seite der Entwicklerkonsole zu finden, um Umleitungs-URIs zu aktualisieren.
Hier ist ein Google-Artikel zum Erstellen einer Projekt- und Kunden-ID .
quelle
Wenn Sie die Google+ Javascript-Schaltfläche verwenden , müssen Sie diese verwenden
postmessage
anstelle der tatsächlichen URI verwenden. Ich habe fast den ganzen Tag gebraucht, um das herauszufinden, da in den Google-Dokumenten aus irgendeinem Grund dies nicht eindeutig angegeben ist.quelle
Error: invalid_request
origin parameter is required!
$client->setRedirectUri('postmessage');
anstelle von$client->setRedirectUri('http://your.url...');
In jedem Ablauf, in dem Sie einen Autorisierungscode auf der Clientseite abgerufen haben , z. B. die
GoogleAuth.grantOfflineAccess()
API , und jetzt den Code an Ihren Server übergeben, einlösen und die Zugriffs- und Aktualisierungstoken speichern möchten, müssen Sie die Literalzeichenfolge verwendenpostmessage
anstelle des redirect_uri.Bauen Sie beispielsweise auf dem Snippet im Ruby-Dokument auf :
Die einzige Google-Dokumentation, die überhaupt erwähnt wird
postmessage
ist dieses alte Google+ Anmeldedokument . Hier ist ein Screenshot und ein Archiv-Link, da G + geschlossen wird und dieser Link wahrscheinlich verschwinden wird:Es ist absolut unverzeihlich, dass die Dokumentseite für Offline-Zugriff dies nicht erwähnt. #FacePalm
quelle
postmessage
, aber ich wollte die spezifischen Umstände (z. B.grantOfflineAccess
) angeben, wann dieser verrückte undokumentierte Hack für mich notwendig war. : PI wollte auch nicht, dass es wahr ist. :) Hat mich Stunden Kopfschmerzen gekostet.Für meine Webanwendung habe ich meinen Fehler durch Schreiben korrigiert
quelle
Stellen Sie sicher, dass Sie das Protokoll "http: //" oder "https: //" überprüfen, da Google das Protokoll ebenfalls überprüft. Fügen Sie besser beide URLs zur Liste hinzu.
quelle
Dies scheint ziemlich seltsam und ärgerlich, dass es keine "einzige" Lösung gibt. für mich hat http: // localhost: 8000 nicht geklappt, aber http: // localhost: 8000 / hat geklappt.
quelle
redirect_uri
ein GENAUES SPIEL auf der Entwicklerkonsole und in Ihrer Anwendung sein muss.Wenn Sie Ihre App unter https://code.google.com/apis/console registrieren und eine Client-ID erstellen, können Sie einen oder mehrere Weiterleitungs-URIs angeben. Der Wert des
redirect_uri
Parameters in Ihrem Auth-URI muss genau mit einem von ihnen übereinstimmen.quelle
https://code.google.com/apis/console
nicht mehr gültig istDiese Antwort ist dieselbe wie die Antwort von Mike und Jeffs Antwort , beide Sätze
redirect_uri
aufpostmessage
auf Client - Seite. Ich möchte mehr über die Serverseite und die besonderen Umstände hinzufügen, die für diese Konfiguration gelten.Tech Stack
Backend
Vorderes Ende
create-react-app
Version 2.1.5Der "Code" -Fluss (speziell für Google OAuth2)
Zusammenfassung: Reagieren -> Social Auth "Code" anfordern -> JWT-Token anfordern, um den "Login" -Status in Bezug auf Ihren eigenen Backend-Server / Ihre eigene Backend-Datenbank zu erhalten.
responseType="code"
, um einen Autorisierungscode zu erhalten. (Es ist kein Token, kein Zugriffstoken!)react-google-login
oben.{ "provider": "google-oauth2", "code": "your retrieved code here", "redirect_uri": "postmessage" }
REST_SOCIAL_OAUTH_ABSOLUTE_REDIRECT_URI
,REST_SOCIAL_DOMAIN_FROM_ORIGIN
undREST_SOCIAL_OAUTH_REDIRECT_URI
in Djangossettings.py
sind nicht erforderlich . (Dies sind Konstanten, die von Django REST Social Auth verwendet werden.) Kurz gesagt, Sie müssen in Django nichts im Zusammenhang mit der Umleitungs-URL einrichten . Das"redirect_uri": "postmessage"
In-React-Frontend reicht aus. Dies ist sinnvoll, da die soziale Authentifizierungsarbeit, die Sie auf Ihrer Seite ausführen müssen, alle POST-Anfragen im Ajax-Stil im Frontend sind und keinerlei Formulare senden. Daher erfolgt standardmäßig keine Umleitung. Aus diesem Grund wird die Umleitungs-URL unbrauchbar, wenn Sie den Code + JWT-Flow verwenden und die Einstellung für die serverseitige Umleitungs-URL keine Auswirkungen hat.youremailprefix717e248c5b924d60
ob Ihre E-Mail-Adresse lautet[email protected]
. Es wird eine zufällige Zeichenfolge angehängt, um einen eindeutigen Benutzernamen zu erstellen. Dies ist das Standardverhalten. Ich glaube, Sie können es anpassen und sich in die Dokumentation vertiefen.Authorization
Header anhängen und eine Anfrage an das Backend senden, erkennt das Django-Backend dies nun als Login, dh authentifiziert Benutzer. Wenn Ihr Token abläuft, müssen Sie es natürlich aktualisieren, indem Sie eine weitere Anfrage stellen.Oh mein Gott, ich habe mehr als 6 Stunden verbracht und endlich das richtig verstanden! Ich glaube, dies ist das erste Mal, dass ich dieses
postmessage
Ding gesehen habe. Jeder, der an einerDjango + DRF + JWT + Social Auth + React
Kombination arbeitet, wird definitiv darauf stoßen. Ich kann nicht glauben, dass keiner der Artikel dies erwähnt, außer den Antworten hier. Aber ich hoffe wirklich, dass dieser Beitrag Ihnen viel Zeit sparen kann, wenn Sie den Django + React-Stack verwenden.quelle
2015Juli15 - die Anmeldung, die letzte Woche mit diesem Skript beim Anmelden gearbeitet hat
hat aufgehört zu arbeiten und Fehler 400 mit verursacht
Error: redirect_uri_mismatch
und im Abschnitt DETAILS:
redirect_uri=storagerelay://...
Ich habe es gelöst, indem ich zu:
quelle
Checkliste:
http
oderhttps
?&
oder&
?/
) oder offen?
(CMD/CTRL)+F
Suchen Sie auf der Seite mit den Anmeldeinformationen nach der genauen Übereinstimmung. Wenn nicht gefunden, suchen Sie nach dem fehlenden.quelle
In meinem Fall lautet mein Anmeldeinformationstyp "Andere". Ich kann es also nicht
Authorized redirect URIs
auf der Seite mit den Anmeldeinformationen finden. Es scheint im Anwendungstyp "Webanwendung" zu erscheinen. Sie können jedoch auf dieDownload JSON
Schaltfläche klicken , um dieclient_secret.json
Datei abzurufen.Öffnen Sie die JSON-Datei, und Sie finden den Parameter wie folgt :
"redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
. Ich benutze http: // localhost und es funktioniert gut für mich.quelle
Bei der Weiterleitungs-URL wird zwischen Groß- und Kleinschreibung unterschieden.
In meinem Fall habe ich beide hinzugefügt: http: // localhost: 5023 / AuthCallback / IndexAsync http: // localhost: 5023 / authcallback / indexasync
quelle
Keine der oben genannten Lösungen hat bei mir funktioniert. unten tat
Ändern Sie autorisierte Redirect-URLs in - https: // localhost: 44377 / signin-google
Hoffe das hilft jemandem.
quelle
Vorsicht vor dem Extra
/
am Ende der URLhttp://localhost:8000
unterscheidet sich vonhttp://localhost:8000/
quelle
Rails-Benutzer (aus den Dokumenten omniauth-google-oauth2 ):
ERINNERN SIE SICH: Fügen Sie nicht das nachfolgende "/" ein.
quelle
Wenn Sie dieses Tutorial verwenden: https://developers.google.com/identity/sign-in/web/server-side-flow , sollten Sie "postmessage" verwenden.
In GO wurde das Problem behoben:
quelle
Für mich lag es daran, dass ich in der Liste "Autorisierte Weiterleitungs-URIs" falsch
https://developers.google.com/oauthplayground/
statthttps://developers.google.com/oauthplayground
(ohne/
am Ende) eingefügt habe .quelle
Lassen Sie mich die Antwort von @ Bazyl vervollständigen: In der Nachricht, die ich erhalten habe, wurde der URI erwähnt
"http://localhost:8080/"
(was natürlich eine interne Google-Konfiguration zu sein scheint). Ich habe den autorisierten URI für diesen geändert"http://localhost:8080/"
und die Nachricht wurde nicht mehr angezeigt ... Und das Video wurde hochgeladen ... Die APIS-Dokumentation ist SEHR lahm ... Jedes Mal, wenn ich etwas habe, das mit Google Apis funktioniert, habe ich einfach fühle mich "glücklich", aber es gibt einen Mangel an guter Dokumentation darüber .... :( Ja, ich habe es zum Laufen gebracht, aber ich verstehe noch nicht, warum es fehlgeschlagen ist oder warum es funktioniert hat ... Es gab nur EINEN Ort, um den URI im Web zu bestätigen, und er wurde in client_secrets.json kopiert ... Ich verstehe nicht, ob es einen DRITTEN Ort gibt, an dem man denselben URI schreiben sollte ... Ich finde nicht nur die Dokumentation, sondern auch die GUI-Design von Google 'quelle
Jeder, der Schwierigkeiten hat, herauszufinden, wo Umleitungs-URLs in der neuen Konsole festgelegt werden sollen: APIs & Authentifizierung -> Anmeldeinformationen -> OAuth 2.0-Client-IDs -> Klicken Sie auf den Link, um alle Ihre Weiterleitungs-URLs zu finden
quelle
Ich musste eine neue Client-ID unter APIs & Services -> Anmeldeinformationen -> Anmeldeinformationen erstellen -> OAuth -> Andere erstellen
Dann habe ich die Datei client_secret.json heruntergeladen und mit meinem Befehlszeilenprogramm verwendet, das auf mein YouTube-Konto hochgeladen wird. Ich habe versucht, eine Web App OAuth-Client-ID zu verwenden, die mir den Umleitungs-URI-Fehler im Browser gab.
quelle
Versuchen Sie, diese Überprüfungen durchzuführen:
Genießen :)
quelle
In meinem Fall musste ich den Client-ID-Typ für Webanwendungen / installierte Anwendungen überprüfen.
installierte Anwendungen: http: // localhost [URIs umleiten] In diesem Fall funktioniert localhost einfach
Webanwendungen: Sie benötigen einen gültigen Domainnamen [URIs umleiten:]
quelle
Was Sie tun müssen, ist, zu Ihrer Entwicklerkonsole zurückzukehren und zu APIs & Auth> Zustimmungsbildschirm zu gehen und diese auszufüllen. Insbesondere der Produktname.
quelle
Vergessen Sie nicht, den Pfad nach Ihrer Domain und IP anzugeben. In meinem Fall habe ich vergessen:
/ oauth2callback
quelle
Ich hatte zwei Anforderungs-URIs in der Konsole, http: // xxxxx / client / api / tablesheet / authredirect und http: // localhost .
Ich habe alle wichtigen Antworten auf diese Frage ausprobiert und bestätigt, dass keine davon mein Problem ist.
Ich habe localhost aus der Konsole entfernt, meine client_secret.json in meinem Projekt aktualisiert und der Fehlanpassungsfehler wurde behoben.
quelle
Ich hatte das gleiche Problem mit der Google-Anmeldung, ich wollte gerade meine Haare ziehen !!! Ich hatte meine Rückrufe im Google Credential Panel auf der Google Developer Console korrekt eingegeben. Hier waren meine Weiterleitungs-URLs:
https://www.example.com/signin-google
https://www.example.com/signin-google/
https://www.example.com/oauth2callback
https://www.example.com/oauth2callback/
alles scheint in Ordnung zu sein, oder? Aber es hat immer noch nicht funktioniert, bis ich eine weitere magische URL hinzugefügt habe. Ich habe die Anmelde-Google- URL (die standardmäßig Google-Rückruf ist) hinzugefügt, ohne dass www und das Problem gelöst wurden.
Berücksichtigen Sie dies (abhängig von Ihrer Domain). Möglicherweise müssen Sie sowohl mit als auch ohne WWW-URLs hinzufügen
quelle
Ich habe Frontend-App und Backend-API.
Von meinem Backend-Server aus habe ich getestet, indem ich auf Google API geklickt habe, und war mit diesem Fehler konfrontiert. Während meiner ganzen Zeit habe ich mich gefragt, warum ich geben muss
redirect_uri
da dies nur das Backend ist, denn Frontend macht Sinn.Was ich getan habe, war, etwas anderes
redirect_uri
(obwohl gültig) vom Server zu geben (vorausgesetzt, dies ist nur ein Platzhalter, es muss nur bei Google registriert werden), aber meine Frontend-URL, die den Token-Code erstellt hat, war anders. Als ich diesen Code in meinen serverseitigen Tests übergab (für die Redirect-Uri anders war), trat dieser Fehler auf.Also mach diesen Fehler nicht. Stellen Sie sicher, dass Ihr Frontend
redirect_uri
mit dem Ihres Servers identisch ist, da Google es verwendet, um die Authentizität zu überprüfen.quelle
Im Folgenden sind die Gründe für den Fehler aufgeführt: Das Problem redirect_uri_mismatch tritt auf:
Empfohlen, Domain-URL zu verwenden
quelle
Der Trick besteht darin, die richtige Umleitungs-URL zum Zeitpunkt der Erstellung der ID einzugeben. Ich habe festgestellt, dass das Aktualisieren der Weiterleitungs-URL, sobald die ID über "Bearbeiten" erstellt wurde, den Job einfach nicht erledigt. Was auch für mich funktioniert hat, ist das Duplizieren des gesamten "Vendor" -Ordners und das Kopieren an denselben Speicherort, an dem sich die "oauth" -Datei befindet (nur bis Sie das Token erfolgreich generiert haben und dann den doppelten "Vendor" -Ordner löschen können). Dies liegt daran, dass der Versuch, über '../vendor/autoload' auf den Herstellerordner zu verweisen, bei mir nicht funktioniert hat.
Löschen Sie also Ihre vorhandene problematische Client-OAuth-ID und versuchen Sie diesen Ansatz, es wird funktionieren.
quelle