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 .

620voto

Steve Bazyl Punkte 10252

Der Redirect-URI (an den die Antwort zurückgegeben wird) muss in der API-Konsole registriert werden, und der Fehler zeigt an, dass Sie das nicht oder nicht richtig getan haben.

Rufen Sie die Konsole Ihres Projekts auf und schauen Sie unter API-Zugang nach. Sie sollten Ihre client ID & client secret zusammen mit einer Liste von Redirect-URIs. Wenn die gewünschte URI nicht aufgeführt ist, klicken Sie auf Einstellungen bearbeiten und fügen Sie die URI zur Liste hinzu.

EDIT: (Von einem hoch bewerteten Kommentar unten) Beachten Sie, dass die Aktualisierung der Google Api Console und diese Änderung kann einige Zeit dauern. In der Regel nur ein paar Minuten, aber manchmal scheint es länger.

211voto

Mukesh Chapagain Punkte 24039

In meinem Fall war es www y non-www URL. Die eigentliche Website hatte www URL und die Autorisierte Redirect URIs in der Google Developer Console hatte non-www URL. Daher gab es eine Unstimmigkeit in der URI-Umleitung. Ich habe das Problem durch Aktualisierung der Authorized Redirect URIs in der Google Developer Console auf www URL.

Andere häufige URI-Fehlanpassungen sind:

  • 使用 http:// in autorisierten Redirect-URIs und https:// als aktuelle URL, oder umgekehrt
  • Die Verwendung des abschließenden Schrägstrichs ( http://example.com/ ) in autorisierten Redirect-URIs zu verwenden und keinen abschließenden Schrägstrich ( http://example.com ) als tatsächliche URL, oder umgekehrt

Hier sind die Schritt-für-Schritt-Screenshots von Google Developer Console, so dass es hilfreich für diejenigen, die es schwierig, die Entwickler-Konsole Seite zu finden, um Redirect URIs zu aktualisieren sind.

  1. Ir a https://console.developers.google.com

  2. Wählen Sie Ihr Projekt

Select your Project

  1. Klicken Sie auf das Menüsymbol

Click on the menu icon

  1. Klicken Sie auf API Manager Menü

Select API Manager menu

  1. Klicken Sie auf Credentials Menü. Und unter OAuth 2.0 Client IDs finden Sie den Namen Ihres Kunden. In meinem Fall lautet er Web Client 1 . Klicken Sie darauf und es erscheint ein Popup-Fenster, in dem Sie Folgendes bearbeiten können Autorisiertes Javascript Herkunft y Autorisierte Umleitungs-URIs .

Select Credentials menu

Nota : Der autorisierte URI enthält standardmäßig alle localhost-Links, und jede Live-Version muss den vollständigen Pfad enthalten, nicht nur die Domäne, z. B. https://example.com/path/to/oauth/url

Hier ist ein Google-Artikel über Projekt- und Kunden-ID erstellen .

141voto

Mike Keskinov Punkte 10854

Wenn Sie Folgendes verwenden Google+-Javascript-Schaltfläche verwenden, dann müssen Sie postmessage anstelle des eigentlichen URI. Ich habe fast einen ganzen Tag gebraucht, um das herauszufinden, da es in den Google-Dokumenten aus irgendeinem Grund nicht klar angegeben ist.

122voto

Jeff Ward Punkte 13425

In jeder Bewegung, in der Sie eine Legitimationskennziffer auf der Client-Seite, wie zum Beispiel die GoogleAuth.grantOfflineAccess() API und nun wollen Sie den Code an Ihren Server weitergeben, ihn einlösen und die Zugriffs- und Aktualisierungs-Token speichern, dann müssen Sie die Zeichenkette postmessage anstelle der redirect_uri.

Zum Beispiel, aufbauend auf dem Schnipsel in der Ruby-Doku :

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"}

Die einzige Google-Dokumentation, die überhaupt erwähnt postmessage ist dies altes Google+-Anmeldedokument . Hier ist ein Screenshot und Archivverbindung da G+ geschlossen wird und dieser Link wahrscheinlich verschwinden wird:

Legacy Google+ API DOC

Es ist absolut unverzeihlich, dass die doc-Seite für Offline-Zugriff wird dies nicht erwähnt. #FacePalm

70voto

Guven Sezgin Kurt Punkte 1039

Für meine Webanwendung habe ich meinen Fehler korrigiert, indem ich schrieb

instead of : http://localhost:11472/authorize/
type :      http://localhost/authorize/

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