keycloak Ungültiger Parameter: redirect_uri

82

Wenn ich versuche, von meiner API aus zu klicken, um den Benutzer von Keycloak zu authentifizieren, aber es gibt mir einen Fehler. Ungültiger Parameter: redirect_uri auf der Keycloak-Seite. Ich habe mein eigenes Reich geschaffen, abgesehen vom Meister. keycloak läuft auf http. Bitte hilf mir.

VIJAY THAKUR
quelle
Während der Überprüfung durch
Inspect
2
Bitte stellen Sie dieselbe Frage nicht mehrmals. Wenn Sie Ihrer ursprünglichen Frage weitere Details hinzufügen möchten, können Sie dies tun, indem Sie direkt unter Ihrer Frage auf "Bearbeiten" klicken.
THelper
2
Mögliches Duplikat des ungültigen Keycloak-Parameters redirect_uri
THelper
1
Suchen Sie
1
In meinem Fall war es ein dummer Fehler: "<IP-Adresse>" statt "http: // <IP-Adresse>"
SwissNavy

Antworten:

53

Was für mich funktionierte, war das Hinzufügen von Wildchar '*' . Obwohl ich für Produktionsaufbauten genauer auf den Wert dieses Feldes eingehen werde. Aber für Entwicklerzwecke können Sie dies tun.

Geben Sie hier die Bildbeschreibung ein

Einstellung verfügbar unter, keycloak admin console -> Realm_Name -> Cients -> Client_Name .

BEARBEITEN: NICHT IN DER PRODUKTION TUN. Dies führt zu einer großen Sicherheitslücke.

Versuche zu lernen
quelle
13
Diese Antwort kann eine gefährliche Sicherheitslücke darstellen. Dadurch öffnen Sie die Tür für den unsicheren Weiterleitungsangriff.
Michael Courcy
Ich kann nicht glauben, dass diese Antwort derzeit Top-Stimmen hat. Dies ist alles andere als eine Lösung und sollte eigentlich nur in Kommentaren erscheinen. Andererseits enthält die Frage zu wenig Informationen, um sie überhaupt zu beantworten.
bsaverino
35

Wenn Sie ein .Net Devloper sind, überprüfen Sie bitte die folgenden Konfigurationen. KeycloakAuthentication options class set CallbackPath = RedirectUri, // Diese Eigenschaft muss anderweitig festgelegt werden. Andernfalls wird ein ungültiger Redirecturi-Fehler angezeigt

Ich hatte den gleichen Fehler. In meinem Fall war das Problem mit gültigen Redirect-URIs nicht korrekt. Das sind also die Schritte, denen ich gefolgt bin.

Melden Sie sich zuerst als Administrator bei keycloack an. Wählen Sie dann Ihren Bereich aus (möglicherweise leiten Sie ihn automatisch zum Bereich weiter). Dann sehen Sie unten Bildschirm

Geben Sie hier die Bildbeschreibung ein

Wählen Sie im linken Bereich Clients aus. Wählen Sie dann den relevanten Client aus, den Sie für Ihre App konfiguriert haben. Standardmäßig befinden Sie sich auf der Registerkarte Einstellungen , wenn Sie diese nicht auswählen. Meine App wurde auf Port 3000 ausgeführt, daher ist meine korrekte Einstellung wie folgt. Angenommen, Sie haben eine App, die auf localhost: 3000 ausgeführt wird. Ihre Einstellung sollte also so sein

Geben Sie hier die Bildbeschreibung ein

Menuka Ishan
quelle
18

Wenn Sie diesen Fehler aufgrund eines neuen Bereichs erhalten, den Sie erstellt haben

Ändern Sie in der URL, zu der Sie umgeleitet werden (möglicherweise müssen Sie in den Chrome-Entwicklungstools nach dieser URL suchen), den Bereich von masterdem gerade erstellten. Wenn Sie ihn nicht verwenden https, stellen Sie sicher, dass redirect_uri auch verwendet wird http.

Wenn Sie diesen Fehler erhalten, weil Sie versuchen, Keycloak auf einer öffentlich zugänglichen Domain (nicht localhost) einzurichten

Schritt 1) Befolgen Sie diese Dokumentation, um eine MySQL-Datenbank einzurichten. Möglicherweise müssen Sie auch auf die offizielle Dokumentation verweisen .

Schritt 2) Führen Sie den Befehl ausupdate REALM set ssl_required = 'NONE' where id = 'master';

Hinweis: Zu diesem Zeitpunkt sollten Sie technisch in der Lage sein, sich anzumelden, aber Version 4.0 von Keycloak verwendet https für die Umleitungs-URL, obwohl wir gerade die https-Unterstützung deaktiviert haben. Bis Keycloak dies behebt, können wir dies mit einem Reverse-Proxy umgehen. Ein Reverse-Proxy ist etwas, das wir sowieso verwenden möchten, um auf einfache Weise SSL / TLS-Zertifikate zu erstellen, ohne sich um Java-Keystores kümmern zu müssen.

Anmerkung 2: Keycloak hat seitdem einen eigenen Proxy herausgebracht. Ich habe dies noch nicht versucht, aber an diesem Punkt möchten Sie möglicherweise aufhören, meinen Anweisungen zu folgen und nachsehen (Keycloak Gatekeeper) [ https://www.keycloak.org/downloads.html] . Wenn Sie Probleme beim Einrichten des Keycloak Gatekeepers haben, behalte ich meine Anweisungen zum Einrichten eines Reverse-Proxys mit Apache bei.

Schritt 3) Installieren Sie Apache. Wir werden Apache als Reverse-Proxy verwenden (ich habe NGINX ausprobiert, aber NGINX hatte einige Einschränkungen, die im Weg standen). Siehe yum Installation von Apache (CentOs 7) und apt-get install Apache (Ubuntu 16) oder Anweisungen für Ihre spezifische Distribution.

Schritt 4) Führen Sie Apache aus

  • Verwenden Sie sudo systemctl start httpd(CentOs) oder sudo systemctl start apache2(Ubuntu)

  • Verwenden Sie sudo systemctl status httpd(CentOs) oder sudo systemctl status apache2 (Ubuntu), um zu überprüfen, ob Apache ausgeführt wird. Wenn Sie die Wörter in grünem Text sehen active (running)oder wenn der letzte Eintrag lautet, sind Started The Apache HTTP Server.Sie gut.

Schritt 5) Wir stellen eine SSL-Verbindung mit dem Reverse-Proxy her und dann kommuniziert der Reverse-Proxy über http mit keyCloak. Da diese http-Kommunikation auf demselben Computer stattfindet, sind Sie immer noch sicher. Wir können Certbot verwenden, um Zertifikate mit automatischer Verlängerung einzurichten .

Wenn diese Art der Verschlüsselung nicht gut genug ist und Ihre Sicherheitsrichtlinie eine End-to-End-Verschlüsselung erfordert, müssen Sie herausfinden, wie Sie SSL über WildFly einrichten , anstatt einen Reverse-Proxy zu verwenden.

Hinweis: Ich konnte https nie dazu bringen, ordnungsgemäß mit dem Admin-Portal zu arbeiten. Vielleicht war dies nur ein Fehler in der Beta-Version von Keycloak 4.0, die ich verwende. Es wird angenommen, dass Sie die SSL-Stufe so einstellen können, dass sie nur für externe Anforderungen erforderlich ist. Dies schien jedoch nicht zu funktionieren. Aus diesem Grund haben wir in Schritt 2 https auf none gesetzt. Von hier an werden wir weiterhin http über einen SSH-Tunnel verwenden, um die Administratoreinstellungen zu verwalten.

Schritt 6) Wenn Sie versuchen, die Site über https zu besuchen, lösen Sie eine HSTS-Richtlinie aus, die http-Anforderungen automatisch dazu zwingt, zu https umzuleiten. Befolgen Sie diese Anweisungen, um die HSTS-Regel in Chrome zu löschen , und besuchen Sie die https-Version der Website vorerst nicht erneut.

Schritt 7) Konfigurieren Sie Apache. Suchen Sie zuerst, wo sich Ihre httpd.conf-Datei befindet . Ihre httpd.conf-Datei enthält wahrscheinlich Konfigurationsdateien aus einem separaten Verzeichnis. In meinem Fall habe ich meine gesamte Konfigurationsdatei in einem conf.dVerzeichnis gefunden, das sich neben dem Ordner befindet, in dem sich die Datei httpd.conf befindet.

Wenn Sie Ihre Conf-Dateien gefunden haben, ändern Sie die folgenden virtuellen Host-Einträge oder fügen Sie sie in Ihre Conf-Dateien ein. Stellen Sie sicher, dass Sie die bereits vorhandenen SSL-Optionen, die von certbot generiert wurden, nicht überschreiben. Wenn Sie fertig sind, sollte Ihre Konfigurationsdatei ungefähr so ​​aussehen.

<VirtualHost *:80>
    RewriteEngine on

    #change https redirect_uri parameters to http
    RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
    RewriteRule . %1redirect_uri=http%2 [NE,R=302]

    #uncomment to force https
    #does not currently work
    #RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}

    #forward the requests on to keycloak
    ProxyPreserveHost On    
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    RewriteEngine on

    #Disable HSTS
    Header set Strict-Transport-Security "max-age=0; includeSubDomains;" env=HTTPS


    #change https redirect_uri parameters to http
    RewriteCond %{request_uri}\?%{query_string} ^(.*)redirect_uri=https(.*)$
    RewriteRule . %1redirect_uri=http%2 [NE,R=302]

    #forward the requests on to keycloak
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    #Leave the items added by certbot alone
    #There should be a ServerName option
    #And a bunch of options to configure the location of the SSL cert files
    #Along with an option to include an additional config file

</VirtualHost>
</IfModule>

Schritt 8) Starten Sie Apache neu. Verwenden Sie sudo systemctl restart httpd(CentOs) oder sudo systemctl restart apache2(Ubuntu).

Schritt 9) Bevor Sie versuchen können, sich beim Server anzumelden, müssen Sie eine andere Methode für die sichere Verbindung einrichten, da wir Keycloak angewiesen haben, http zu verwenden. Dies kann entweder durch Installieren eines VPN-Dienstes auf dem Keycloak-Server oder durch Verwenden von SOCKS erfolgen. Ich habe einen SOCKS-Proxy verwendet. Dazu müssen Sie zunächst die dynamische Portweiterleitung einrichten.

ssh -N -D 9905 [email protected]

Oder richten Sie es über Putty ein .

Der gesamte an Port 9905 gesendete Datenverkehr wird nun sicher über einen SSH-Tunnel an Ihren Server weitergeleitet. Stellen Sie sicher, dass Sie Port 9905 auf der Firewall Ihres Servers auf die Whitelist setzen.

Sobald Sie die dynamische Portweiterleitung eingerichtet haben, müssen Sie Ihren Browser so einrichten , dass ein SOCKS-Proxy für Port 9905 verwendet wird. Anweisungen hier .

Schritt 10) Sie sollten sich jetzt beim Keycloak-Administratorportal anmelden können. Um eine Verbindung zur Website herzustellen , rufen Sie http://127.0.0.1 auf . Der SOCKS-Proxy führt Sie zur Administratorkonsole. Stellen Sie sicher, dass Sie den SOCKS-Proxy deaktivieren, wenn Sie fertig sind, da er die Ressourcen Ihres Servers nutzt. Wenn Sie diese Option beibehalten, wird die Internetgeschwindigkeit für Sie langsamer.

Schritt 11) Fragen Sie mich nicht, wie lange ich gebraucht habe, um das alles herauszufinden.

wp-overwatch.com
quelle
1
Dies war die Zeile, die meine Aufmerksamkeit auf sich zog: #Ändern Sie die https redirect_uri-Parameter in http RewriteCond% {request_uri} \?% {Query_string} ^ (. *) Redirect_uri = https (. *) $ RewriteRule. % 1redirect_uri = http% 2 [NE, R = 302] Ich verwende nginx, aber sobald ich das https auf dem redirect_uri durch http ersetzt habe, hat es funktioniert.
Telmo Dias
9

Gehen Sie zur Keycloak-Administrationskonsole> SpringBootKeycloak> Cients> Login-App-Seite. Fügen Sie hier im Abschnitt "Uris mit gültiger Umleitung" http: // localhost: 8080 / sso / login hinzu

Dies hilft bei der Lösung des indirekten Uri-Problems

Sushilshimpi
quelle
13
Das Problem ist, dass auf die Administratorkonsole nicht zugegriffen werden kann.
SmallChess
Ich habe dieses Problem bekommen, nachdem ich die web-contextEinstellung von Keycloak geändert habe
Mark
5

Wenn dieses Problem auftritt, nachdem Sie den Keycloak-Kontextpfad geändert haben, müssen Sie eine zusätzliche Änderung an einer Umleitungs-URL-Einstellung vornehmen:

  1. Wechseln Sie <web-context>yourchange/auth</web-context>zurück zu <web-context>auth</web-context>in standalone.xml
  2. Starten Sie Keycloak neu und navigieren Sie zur Anmeldeseite ( /auth/admin)
  3. Melden Sie sich an und wählen Sie den Bereich "Master"
  4. Wählen Sie "Clients" aus dem Seitenmenü
  5. Wählen Sie den Client "security-admin-console" aus der angezeigten Liste aus
  6. Ändern Sie die "Valid Redirect URIs" von /auth/admin/master/console/*in /yourchange/auth/admin/master/console/*
  7. Speichern und abmelden. Nach dem Abmelden wird erneut die Meldung "Ungültige Weiterleitungs-URL" angezeigt.
  8. <web-context>yourchange/auth</web-context>Geben Sie nun Ihre ursprüngliche Änderung in standalone.xml ein. Starten Sie Keycloak neu und navigieren Sie zur Anmeldeseite (die jetzt ist /yourchange/auth/admin).
  9. Einloggen und genießen
Kennzeichen
quelle
1
Alternativ können Sie die Tabelle redirect_urisin der DB bearbeiten und die
Wertefelder
4

Melden Sie sich auf der Website der Keycloak-Administratorkonsole an, wählen Sie den Bereich und seinen Client aus und stellen Sie dann sicher, dass allen URIs des Clients das Protokoll vorangestellt ist, http://z. B. mit. Ein Beispiel wärehttp://localhost:8082/*

Eine andere Möglichkeit, das Problem zu lösen, besteht darin, die Ausgabe der Keycloak-Serverkonsole anzuzeigen, die Zeile zu suchen, in der angegeben wird, dass die Anforderung abgelehnt wurde, den redirect_uriangezeigten Wert daraus zu kopieren und in das * Valid Redirect URIsFeld des Clients auf der Website der Keycloak-Administratorkonsole einzufügen. Der angeforderte URI ist dann einer der akzeptablen.

Stephane
quelle
2

Ich habe das Problem mit dem ungültigen Parameter: redirect_uri festgestellt, als ich dem Beispiel für Spring Boot und Keycloak gefolgt bin, das unter http://www.baeldung.com/spring-boot-keycloak verfügbar ist . Wenn Sie den Client vom Keycloak-Server hinzufügen, müssen Sie den Umleitungs-URI für diesen Client angeben, damit der Keycloak-Server die Umleitung durchführen kann. Als ich mehrmals auf denselben Fehler stieß, habe ich die korrekte URL von der Keycloak-Serverkonsole kopiert und im gültigen Redirect-URI-Bereich angegeben, und es hat einwandfrei funktioniert!

Titanen
quelle
2

Sogar ich stand vor dem gleichen Problem. Ich habe es korrigiert, indem ich zu dem bestimmten Client unter dem Bereich bzw. der darin enthaltenen Umleitungs-URL add * nach Ihrer vollständigen URL gegangen bin.

Das Problem wird gelöst

Beispiel: URI umleiten: http: localhost: 3000 / myapp / generator / *

user12849940
quelle
1

Sie müssen die Keycloak-Administratorkonsole auf Fronted-Konfiguration überprüfen. Es muss falsch konfiguriert sein, um URL- und Webursprünge umzuleiten.

boycod3
quelle
1

Wenn Sie versuchen, nach dem Abmelden (wie ich) zur Keycloak-Anmeldeseite umzuleiten, ist dies standardmäßig nicht zulässig, muss jedoch auch in der Einstellung "Gültige Umleitungs-URIs" in der Administrationskonsole Ihres Clients konfiguriert werden.

jschmuecking
quelle
1

Dieser Fehler wird auch ausgelöst, wenn Ihrem Benutzer nicht die erwartete Rolle in der Benutzerdefinition delegiert wurde (Festlegen der Rolle für das Realm in der Dropdown-Liste).

zhrist
quelle
1

Ich stand vor dem gleichen Problem. Ich habe es korrigiert, indem ich zu dem bestimmten Client unter dem Bereich bzw. der darin enthaltenen Umleitungs-URL add * nach Ihrer vollständigen URL gegangen bin.

aadhar Passwort
quelle
1

Für mich hatte ich einen fehlenden Schrägstrich /im Wert fürValid Redirect URIs

Acid
quelle
reparierte es mit dieser Lösung.
Sandy B
0

Ihr Umleitungs-URI in Ihrem Code (keycloak.init) sollte mit dem auf dem Keycloak-Server (Client -> Valid Uri) festgelegten Umleitungs-URI übereinstimmen. Klicken Sie hier, um das Bild meines Codes anzuzeigen Klicken Sie hier, um meine Keycloak-Einstellungen anzuzeigen

IkM
quelle
0

Überprüfen Sie, ob der Wert des Parameters redirect_uri für den von Ihnen verwendeten Client auf der Whitelist steht. Sie können die Konfiguration des Clients über die Administratorkonsole verwalten.

Die Umleitungs-URL sollte genau mit einer der Weiterleitungs-URLs auf der Whitelist übereinstimmen, oder Sie können einen Platzhalter am Ende der URL verwenden, die Sie auf die Whitelist setzen möchten. Siehe: https://www.keycloak.org/docs/latest/server_admin/#_clients

Beachten Sie, dass die Verwendung von Platzhaltern zum Umleiten von URLs auf die Whitelist von Keycloak zulässig ist, jedoch einen Verstoß gegen die OpenId Connect-Spezifikation darstellt. Siehe die Diskussion dazu unter https://lists.jboss.org/pipermail/keycloak-dev/2018-December/011440.html

Arnold Obdeijn
quelle
0

Es scheint, dass dieses Problem auftreten kann, wenn Sie Leerzeichen in Ihren Realm-Namen einfügen. Ich hatte den Namen gesetzt Debugging Realmund bekam diesen Fehler. Als ich dazu wechselte, DebuggingRealmfunktionierte es.

Der Anzeigename kann weiterhin Leerzeichen enthalten. Seltsam, dass der Schlüsselumhang dies bei der Eingabe durch den Administrator nicht überprüft.

worldayshi
quelle