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.
82
Antworten:
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.
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.
quelle
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
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
quelle
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
master
dem gerade erstellten. Wenn Sie ihn nicht verwendenhttps
, stellen Sie sicher, dass redirect_uri auch verwendet wirdhttp
.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 aus
update 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) odersudo systemctl start apache2
(Ubuntu)Verwenden Sie
sudo systemctl status httpd
(CentOs) odersudo systemctl status apache2
(Ubuntu), um zu überprüfen, ob Apache ausgeführt wird. Wenn Sie die Wörter in grünem Text sehenactive (running)
oder wenn der letzte Eintrag lautet, sindStarted 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.d
Verzeichnis 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.
Schritt 8) Starten Sie Apache neu. Verwenden Sie
sudo systemctl restart httpd
(CentOs) odersudo 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.
quelle
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
quelle
web-context
Einstellung von Keycloak geändert habeWenn dieses Problem auftritt, nachdem Sie den Keycloak-Kontextpfad geändert haben, müssen Sie eine zusätzliche Änderung an einer Umleitungs-URL-Einstellung vornehmen:
<web-context>yourchange/auth</web-context>
zurück zu<web-context>auth</web-context>
in standalone.xml/auth/admin
)/auth/admin/master/console/*
in/yourchange/auth/admin/master/console/*
<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
).quelle
redirect_uris
in der DB bearbeiten und dieMelden 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_uri
angezeigten Wert daraus zu kopieren und in das* Valid Redirect URIs
Feld des Clients auf der Website der Keycloak-Administratorkonsole einzufügen. Der angeforderte URI ist dann einer der akzeptablen.quelle
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!
quelle
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 / *
quelle
Wenn Sie den Autorisierungscode-Fluss
response_type
verwenden, muss der Abfrageparameter gleich seincode
. Siehe https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.htmlquelle
Sie müssen die Keycloak-Administratorkonsole auf Fronted-Konfiguration überprüfen. Es muss falsch konfiguriert sein, um URL- und Webursprünge umzuleiten.
quelle
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.
quelle
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).
quelle
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.
quelle
Für mich hatte ich einen fehlenden Schrägstrich
/
im Wert fürValid Redirect URIs
quelle
Ihr Umleitungs-URI in Ihrem Code (keycloak.init) sollte mit dem auf dem Keycloak-Server (Client -> Valid Uri) festgelegten Umleitungs-URI übereinstimmen.
quelle
Ü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
quelle
Es scheint, dass dieses Problem auftreten kann, wenn Sie Leerzeichen in Ihren Realm-Namen einfügen. Ich hatte den Namen gesetzt
Debugging Realm
und bekam diesen Fehler. Als ich dazu wechselte,DebuggingRealm
funktionierte es.Der Anzeigename kann weiterhin Leerzeichen enthalten. Seltsam, dass der Schlüsselumhang dies bei der Eingabe durch den Administrator nicht überprüft.
quelle