Kiedy próbuję trafić z mojego interfejsu API, aby uwierzytelnić użytkownika z keycloak, ale daje mi to błąd Nieprawidłowy parametr: redirect_uri na stronie keycloak. Stworzyłem własne królestwo poza mistrzem. keycloak działa na http. Proszę pomóż mi.
86
Odpowiedzi:
U mnie zadziałało dodanie znaku wieloznacznego „*” . Chociaż w przypadku kompilacji produkcyjnych zamierzam bardziej szczegółowo określić wartość tego pola. Ale dla celów programistycznych możesz to zrobić.
Ustawienie dostępne w konsoli administratora Keycloak -> Realm_Name -> Cients -> Client_Name .
EDYCJA: NIE ROBIĆ TEGO W PRODUKCJI. Takie postępowanie stwarza dużą lukę w zabezpieczeniach.
źródło
Jeśli jesteś Devloper .Net Proszę sprawdzić poniżej Konfiguracje keycloak Opcje uwierzytelniania class set CallbackPath = RedirectUri, // ta właściwość musi być ustawiona w inny sposób, pokaże nieprawidłowy błąd przekierowania
Napotkałem ten sam błąd. W moim przypadku problem dotyczył prawidłowych identyfikatorów URI przekierowania, które nie były poprawne. Oto kroki, które wykonałem.
Najpierw zaloguj się do keycloacku jako administrator. Następnie wybierz swoją sferę (być może automatycznie przekierujesz do niej). Następnie zobaczysz poniższy ekran
Wybierz Klienci z lewego panelu. Następnie wybierz odpowiedniego klienta, którego skonfigurowałeś dla swojej aplikacji. Domyślnie pojawi się zakładka Ustawienia , jeśli jej nie wybierzesz. Moja aplikacja działała na porcie 3000, więc moje prawidłowe ustawienie jest takie jak poniżej. powiedzmy, że masz aplikację działającą na localhost: 3000, więc twoje ustawienie powinno być takie
źródło
Jeśli otrzymujesz ten błąd z powodu nowej domeny, którą utworzyłeś
W adresie URL, do którego jesteś przekierowywany (być może będziesz musiał poszukać tego adresu URL w narzędziach programistycznych Chrome), zmień dziedzinę z
master
na tę, którą właśnie utworzyłeś, a jeśli nie używaszhttps
, upewnij się, że redirect_uri również używahttp
.Jeśli otrzymujesz ten błąd, ponieważ próbujesz skonfigurować Keycloak w publicznej domenie (nie na lokalnym hoście)
Krok 1) Postępuj zgodnie z tą dokumentacją, aby skonfigurować bazę danych MySql. Konieczne może być również odwołanie się do oficjalnej dokumentacji .
Krok 2) Uruchom polecenie
update REALM set ssl_required = 'NONE' where id = 'master';
Uwaga: w tym momencie powinieneś być technicznie w stanie się zalogować, ale wersja 4.0 Keycloak używa protokołu HTTPS do przekierowania uri, mimo że właśnie wyłączyliśmy obsługę protokołu HTTPS. Dopóki Keycloak nie naprawi tego, możemy obejść ten problem za pomocą odwrotnego proxy. Odwrotne proxy to coś, czego i tak będziemy chcieli użyć, aby łatwo tworzyć certyfikaty SSL / TLS bez martwienia się o magazyny kluczy Java.
Uwaga 2: Keycloak od tego czasu wyszedł z własnym proxy. Jeszcze tego nie próbowałem, ale w tym momencie możesz przestać postępować zgodnie z moimi wskazówkami i sprawdzić (keycloak gatekeeper) [ https://www.keycloak.org/downloads.html] . Jeśli masz problemy ze skonfigurowaniem Keycloak Gatekeeper, zachowam instrukcje dotyczące konfigurowania odwrotnego serwera proxy w Apache.
Krok 3) Zainstaluj Apache. Będziemy używać Apache jako odwrotnego proxy (próbowałem NGINX, ale NGINX miał pewne ograniczenia, które przeszkadzały). Zobacz yum instalowanie Apache (CentOs 7) i apt-get install Apache (Ubuntu 16) lub znajdź instrukcje dotyczące konkretnej dystrybucji.
Krok 4) Uruchom Apache
Użyj
sudo systemctl start httpd
(CentOs) lubsudo systemctl start apache2
(Ubuntu)Użyj
sudo systemctl status httpd
(CentOs) lubsudo systemctl status apache2
(Ubuntu), aby sprawdzić, czy Apache jest uruchomiony. Jeśli widzisz na zielono słowaactive (running)
lub jeśliStarted The Apache HTTP Server.
czytasz ostatni wpis , jesteś dobry.Krok 5) Nawiążemy połączenie SSL z odwrotnym proxy, a następnie zwrotne proxy będzie komunikowało się z keyCloak przez http. Ponieważ ta komunikacja HTTP odbywa się na tym samym komputerze, nadal jesteś bezpieczny. Możemy użyć Certbota, aby skonfigurować automatyczne odnawianie certyfikatów.
Jeśli ten typ szyfrowania nie jest wystarczająco dobry, a Twoja polityka bezpieczeństwa wymaga szyfrowania od końca do końca, będziesz musiał dowiedzieć się, jak skonfigurować SSL przez WildFly , zamiast korzystać z odwrotnego proxy.
Uwaga: tak naprawdę nigdy nie udało mi się uzyskać prawidłowego działania protokołu https z portalem administracyjnym. Być może to był błąd w wersji beta Keycloak 4.0, którego używam. Przypuszczasz, że możesz ustawić poziom SSL tak, aby wymagał go tylko dla żądań zewnętrznych, ale to nie zadziałało, dlatego w kroku 2 ustawiliśmy https na none. Odtąd będziemy nadal używać protokołu HTTP przez tunel SSH do zarządzania ustawieniami administratora.
Krok 6) Za każdym razem, gdy spróbujesz odwiedzić witrynę przez https, uruchomisz zasadę HSTS, która automatycznie wymusi przekierowanie żądań http na https. Postępuj zgodnie z tymi instrukcjami, aby usunąć regułę HSTS z przeglądarki Chrome , a następnie na razie nie odwiedzaj ponownie wersji witryny https.
Krok 7) Skonfiguruj Apache. Najpierw znajdź lokalizację twojego pliku httpd.conf . Twój plik httpd.conf prawdopodobnie zawiera pliki konfiguracyjne z oddzielnego katalogu. W moim przypadku znalazłem cały plik konfiguracyjny w
conf.d
katalogu znajdującym się obok folderu, w którym znajdował się plik httpd.conf.Po znalezieniu plików conf zmień lub dodaj następujące wpisy hostów wirtualnych w plikach conf. Upewnij się, że nie zastępujesz już istniejących opcji SSL, które zostały wygenerowane przez certbot. Kiedy skończysz, twój plik konfiguracyjny powinien wyglądać mniej więcej tak.
Krok 8) Uruchom ponownie Apache. Użyj
sudo systemctl restart httpd
(CentOs) lubsudo systemctl restart apache2
(Ubuntu).Krok 9) Zanim będziesz miał okazję spróbować zalogować się na serwer, ponieważ powiedzieliśmy Keycloak, aby używał protokołu http, musimy ustawić inną metodę bezpiecznego łączenia. Można to zrobić, instalując usługę VPN na serwerze Keycloak lub używając SOCKS. Użyłem proxy SOCKS. Aby to zrobić, musisz najpierw skonfigurować dynamiczne przekierowanie portów.
ssh -N -D 9905 [email protected]
Lub skonfiguruj za pomocą Putty .
Cały ruch wysyłany do portu 9905 będzie teraz bezpiecznie kierowany przez tunel SSH do Twojego serwera. Upewnij się, że na białej liście znajduje się port 9905 w zaporze serwera.
Po skonfigurowaniu dynamicznego przekierowania portów należy skonfigurować przeglądarkę do korzystania z serwera proxy SOCKS na porcie 9905. Instrukcje tutaj .
Krok 10) Teraz powinieneś być w stanie zalogować się do portalu administratora Keycloak. Aby połączyć się ze stroną internetową, przejdź do http://127.0.0.1 , a proxy SOCKS przeniesie Cię do konsoli administratora. Upewnij się, że wyłączasz serwer proxy SOCKS, gdy skończysz, ponieważ wykorzystuje on zasoby serwera i spowoduje wolniejszą prędkość Internetu, jeśli będzie dalej.
Krok 11) Nie pytaj mnie, ile czasu zajęło mi rozgryzienie tego wszystkiego.
źródło
Przejdź do konsoli administratora Keycloak> SpringBootKeycloak> Cients> strona logowania do aplikacji. Tutaj w sekcji valid-redirect uris dodaj http: // localhost: 8080 / sso / login
Pomoże to rozwiązać problem pośredniego URI
źródło
web-context
ustawienia KeycloakJeśli widzisz ten problem po zmodyfikowaniu ścieżki kontekstu Keycloak, musisz wprowadzić dodatkową zmianę w ustawieniu adresu URL przekierowania:
<web-context>yourchange/auth</web-context>
powrotem na<web-context>auth</web-context>
standalone.xml/auth/admin
)/auth/admin/master/console/*
na/yourchange/auth/admin/master/console/*
<web-context>yourchange/auth</web-context>
w standalone.xml Uruchom ponownie Keycloak i przejdź do strony logowania (która jest teraz/yourchange/auth/admin
)źródło
redirect_uris
w DB i dostosowywać pola wartościZaloguj się na stronie konsoli administratora Keycloak, wybierz dziedzinę i jej klienta, a następnie upewnij się, że wszystkie identyfikatory URI klienta są poprzedzone protokołem, czyli
http://
na przykład. Przykładem może byćhttp://localhost:8082/*
Innym sposobem rozwiązania problemu jest wyświetlenie danych wyjściowych konsoli serwera Keycloak, zlokalizowanie wiersza z informacją o odrzuceniu żądania, skopiowanie z niej
redirect_uri
wyświetlonej wartości i wklejenie jej w* Valid Redirect URIs
polu klienta na stronie konsoli administratora Keycloak. Żądany identyfikator URI jest wtedy jednym z możliwych do zaakceptowania.źródło
Napotkałem problem z nieprawidłowym parametrem: redirect_uri podczas korzystania z przykładu Spring Boot i Keycloak dostępnego na http://www.baeldung.com/spring-boot-keycloak . dodając klienta z serwera keycloak musimy podać identyfikator URI przekierowania dla tego klienta, aby serwer keycloak mógł wykonać przekierowanie. Kiedy wielokrotnie napotykałem ten sam błąd, kopiowałem poprawny adres URL z konsoli serwera Keycloak i podawałem go w prawidłowej przestrzeni URI przekierowania i działało dobrze!
źródło
nawet ja miałem ten sam problem. Poprawiłem to, przechodząc do konkretnego klienta pod domeną odpowiednio w tym przekierowanie URL dodaj * po pełnym adresie URL.
PROBLEM ZOSTANIE ROZWIĄZANY
Przykład: przekierowanie URI: http: localhost: 3000 / myapp / generator / *
źródło
Miałem ten sam problem. Poprawiłem to, przechodząc do konkretnego klienta pod domeną odpowiednio w tym przekierowanie URL dodaj * po pełnym adresie URL.
źródło
U mnie brakowało końcowego ukośnika
/
w wartości forValid Redirect URIs
źródło
Jeśli używasz przepływu kodu autoryzacji,
response_type
parametr zapytania musi być równycode
. Zobacz https://www.keycloak.org/docs/3.3/server_admin/topics/sso-protocols/oidc.htmlźródło
Musisz sprawdzić konsolę administratora Keycloak pod kątem konfiguracji fronted. Musi być nieprawidłowo skonfigurowany dla adresu URL przekierowania i źródeł internetowych.
źródło
Jeśli po wylogowaniu próbujesz przekierować do strony logowania Keycloak (tak jak ja), domyślnie nie jest to dozwolone, ale należy je również skonfigurować w ustawieniu „Prawidłowe identyfikatory URI przekierowania” w konsoli administratora klienta.
źródło
Ten błąd jest również generowany, gdy użytkownik nie ma przypisanej roli w definicji użytkownika (lista rozwijana Ustaw rolę dla dziedziny).
źródło
Twój identyfikator URI przekierowania w kodzie (keycloak.init) powinien być taki sam, jak identyfikator URI przekierowania ustawiony na serwerze Keycloak (klient -> Valid Uri)
źródło
Sprawdź, czy wartość parametru redirect_uri znajduje się na białej liście dla używanego klienta. Możesz zarządzać konfiguracją klienta za pośrednictwem konsoli administratora.
Adres URI przekierowania powinien dokładnie pasować do jednego z adresów URI przekierowań umieszczonych na białej liście lub możesz użyć symbolu wieloznacznego na końcu identyfikatora URI, który chcesz umieścić na białej liście. Zobacz: https://www.keycloak.org/docs/latest/server_admin/#_clients
Zauważ, że używanie symboli wieloznacznych do umieszczania na białej liście przekierowań adresów URI jest dozwolone przez Keycloak, ale w rzeczywistości stanowi naruszenie specyfikacji OpenId Connect. Zobacz dyskusję na ten temat na https://lists.jboss.org/pipermail/keycloak-dev/2018-December/011440.html
źródło
Wygląda na to, że ten problem może wystąpić, jeśli umieścisz spacje w nazwie swojej dziedziny. Miałem ustawioną nazwę
Debugging Realm
i otrzymałem ten błąd. Kiedy zmieniłemDebuggingRealm
, zadziałało.W wyświetlanej nazwie nadal możesz mieć spacje. Dziwne, że Keycloak nie sprawdza tego na wejściu administratora.
źródło