653 Stimmen

Google OAuth 2-Autorisierung - Fehler: redirect_uri_mismatch

Auf der Website https://code.google.com/apis/console Ich habe meine Anwendung registriert, generierte Kunden-ID: y Geheimnis des Kunden zu meiner App und versuchte, sich mit Google anzumelden. Leider bekam ich die Fehlermeldung:

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 Meldung, und wie kann ich sie beheben? Ich verwende den Edelstein omniauth-google-oauth2 .

61voto

Rohan Devaki Punkte 2161

1.Sie würden einen Fehler wie diesen sehen

enter image description here

2.dann sollten Sie auf Details anfordern enter image description here

Danach müssen Sie diese Url kopieren und Folgendes hinzufügen https://console.cloud.google.com/

  1. gehen zu https://console.cloud.google.com/

enter image description here enter image description here

  1. Klicken Sie auf Menü -> API & Dienste -> Anmeldeinformationen

enter image description here

  1. sehen Sie ein Dashboard wie dieses, klicken Sie auf OAuth Client bearbeiten enter image description here

  2. jetzt in Authorized Javascript Origins y Authorized redirect URLS fügen Sie die Url hinzu, die den Fehler angezeigt hat redirect_uri_mismatch d.h. hier ist es http://algorithammer.herokuapp.com also habe ich das an beiden Stellen in Authorized Javascript Origins y Authorized redirect URLS

  3. Klicken Sie auf "Speichern" und warten Sie 5 Minuten, bevor Sie erneut versuchen, sich einzuloggen.

41voto

Chintan Punkte 604

Achten Sie darauf, das Protokoll "http://" oder "https://" zu überprüfen, da Google das Protokoll ebenfalls überprüft. Besser ist es, beide URLs in die Liste aufzunehmen.

18voto

arshpreet Punkte 639

Es scheint ziemlich seltsam und ärgerlich zu sein, dass es keine "eine" Lösung gibt. für mich http://localhost:8000 hat nicht geklappt, aber http://localhost:8000/ ausgearbeitet.

15voto

Shawn Punkte 745

Diese Antwort ist identisch mit diese Antwort von Mike y Jeffs Antwort beide Sätze redirect_uri a postmessage auf der Client-Seite. Ich möchte mehr über die Serverseite hinzufügen, und auch die besonderen Umstände, die für diese Konfiguration gelten.

Technischer Stapel

Backend

Frontend

Der "Code"-Fluss (speziell für Google OAuth2)

Zusammenfassung: React --> request social auth "code" --> request jwt token, um den "login"-Status in Bezug auf Ihren eigenen Backend-Server/Datenbank zu erhalten.

  1. Frontend (React) verwendet eine "Google-Anmeldeschaltfläche" mit responseType="code" um einen Autorisierungscode zu erhalten. (Es ist nicht Token, nicht Zugriffstoken!)
    • Die Google-Anmeldeschaltfläche ist von react-google-login oben erwähnt.
    • Wenn Sie auf die Schaltfläche klicken, öffnet sich ein Popup-Fenster, in dem der Benutzer ein Konto auswählen kann. Nachdem der Benutzer ein Konto ausgewählt und das Fenster geschlossen hat, erhalten Sie den Code aus der Callback-Funktion der Schaltfläche.
  2. Das Frontend sendet dies an den JWT-Endpunkt des Backend-Servers.
    • POST-Anfrage, mit { "provider": "google-oauth2", "code": "your retrieved code here", "redirect_uri": "postmessage" }
  3. Für meinen Django-Server verwende ich Django REST Framework JWT + Django REST Social Auth. Django empfängt den Code vom Frontend und verifiziert ihn mit dem Google-Dienst (für Sie erledigt). Sobald er verifiziert ist, sendet er den JWT (das Token) zurück an das Frontend. Das Frontend kann nun das Token auslesen und irgendwo speichern.
    • Alle von REST_SOCIAL_OAUTH_ABSOLUTE_REDIRECT_URI , REST_SOCIAL_DOMAIN_FROM_ORIGIN y REST_SOCIAL_OAUTH_REDIRECT_URI in Djangos settings.py sind unnötig . (Sie sind Konstanten, die von Django REST Social Auth verwendet werden) Kurz gesagt, Sie müssen in Django nichts einrichten, was mit der Umleitungsurl zusammenhängt . Die "redirect_uri": "postmessage" im React-Frontend ausreichen. Das macht Sinn, weil die Social-Authentifizierungsarbeit, die Sie auf Ihrer Seite machen müssen, eine POST-Anfrage im Ajax-Stil im Frontend ist, ohne dass ein Formular eingereicht wird, so dass standardmäßig keine Umleitung stattfindet. Das ist der Grund, warum die Umleitungsurl nutzlos wird, wenn Sie den Code + JWT-Flow verwenden, und die serverseitige Umleitungsurl-Einstellung hat keine Wirkung.
  4. Die Django REST Social Auth übernimmt die Erstellung von Konten. Das bedeutet, dass es die E-Mail und den Nachnamen des Google-Kontos überprüft und feststellt, ob sie mit einem Konto in der Datenbank übereinstimmen. Wenn nicht, wird es ein Konto für Sie erstellen, mit der genauen E-Mail und Nachname. Der Benutzername wird aber etwa so lauten youremailprefix717e248c5b924d60 wenn Ihre E-Mail lautet youremailprefix@example.com . Es fügt eine zufällige Zeichenfolge an, um einen eindeutigen Benutzernamen zu erstellen. Dies ist das Standardverhalten, ich glaube, Sie können es anpassen und sich in der Dokumentation umsehen.
  5. Das Frontend speichert dieses Token und wenn es CRUD mit dem Backend-Server durchführen muss, insbesondere Erstellen/Löschen/Aktualisieren, wenn Sie das Token in Ihrem Authorization Header und senden Sie die Anfrage an das Backend. Das Django-Backend erkennt nun, dass es sich um einen Login handelt, d.h. um einen authentifizierten Benutzer. Wenn Ihr Token abläuft, müssen Sie es natürlich durch eine weitere Anfrage aktualisieren.

Ach du meine Güte, ich habe mehr als 6 Stunden damit verbracht und es endlich geschafft! Ich glaube, das ist das 1. Mal, dass ich das gesehen habe postmessage Sache. Jeder, der an einem Django + DRF + JWT + Social Auth + React Die Kombination wird auf jeden Fall einschlagen. Ich kann nicht glauben, dass keiner der Artikel da draußen erwähnt dies außer Antworten hier. Aber ich hoffe wirklich, dass dieser Beitrag können Sie Tonnen von Zeit sparen, wenn Sie die Django + React-Stack verwenden.

11voto

codezjx Punkte 8832

In meinem Fall ist meine Anmeldedaten-Anwendungsart "Sonstige". Ich kann also nicht finden Authorized redirect URIs auf der Seite mit den Anmeldeinformationen. Es scheint unter Anwendungstyp: "Webanwendung" zu erscheinen. Aber Sie können auf die Download JSON Taste, um die client_secret.json Datei. enter image description here

Öffnen Sie die json-Datei, und Sie können den Parameter wie folgt finden: "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"] . Ich wähle die Verwendung http://localhost und bei mir funktioniert es einwandfrei.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X