keycloak Nieprawidłowy parametr: redirect_uri


86

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.


podczas sprawdzania elementu inspect pokazuje błąd 500
VIJAY THAKUR

2
Nie publikuj wielokrotnie tego samego pytania . Jeśli chcesz dodać więcej szczegółów do swojego pierwotnego pytania, możesz to zrobić, klikając „edytuj” bezpośrednio pod swoim pytaniem.
THelper,


1
Sprawdź
adresy

1
W moim przypadku był to głupi błąd: „<adres IP>” zamiast „http: // <adres IP>”
SwissNavy

Odpowiedzi:


56

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ć.

wprowadź opis obrazu tutaj

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.


13
Ta odpowiedź może być niebezpieczną luką w zabezpieczeniach, otwierając w ten sposób drzwi do niezabezpieczonego ataku przekierowującego.
Michael Courcy,

Nie mogę uwierzyć, że ta odpowiedź ma obecnie najwięcej głosów. To dalekie od rozwiązania i powinno się to pojawiać tylko w komentarzach. Z drugiej strony, w pytaniu jest za mało informacji, aby nawet spróbować odpowiedzieć.
bsaverino

Co musimy tam umieścić, jeśli używamy Keycloak z aplikacji mobilnej (zakodowanej w React Native)?
Sebastian Diaz

35

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

wprowadź opis obrazu tutaj

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

wprowadź opis obrazu tutaj


19

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 masterna tę, którą właśnie utworzyłeś, a jeśli nie używasz https, 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 polecenieupdate 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) lub sudo systemctl start apache2(Ubuntu)

  • Użyj sudo systemctl status httpd(CentOs) lub sudo systemctl status apache2 (Ubuntu), aby sprawdzić, czy Apache jest uruchomiony. Jeśli widzisz na zielono słowa active (running)lub jeśli Started 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.dkatalogu 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.

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

Krok 8) Uruchom ponownie Apache. Użyj sudo systemctl restart httpd(CentOs) lub sudo 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 user@example.com

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.


1
To była linia, która zwróciła moją uwagę: # zamień parametry https redirect_uri na http RewriteCond% {request_uri} \?% {Query_string} ^ (. *) Redirect_uri = https (. *) $ RewriteRule. % 1redirect_uri = http% 2 [NE, R = 302] Używam nginx, ale jak tylko podstawiłem https na http w redirect_uri, zadziałało.
Telmo Dias

9

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


13
Problem polega na tym, że konsola administratora jest niedostępna.
SmallChess

Mam ten problem po zmodyfikowaniu web-contextustawienia Keycloak
Mark

5

Jeśli widzisz ten problem po zmodyfikowaniu ścieżki kontekstu Keycloak, musisz wprowadzić dodatkową zmianę w ustawieniu adresu URL przekierowania:

  1. Zmień z <web-context>yourchange/auth</web-context>powrotem na <web-context>auth</web-context>standalone.xml
  2. Uruchom ponownie Keycloak i przejdź do strony logowania ( /auth/admin)
  3. Zaloguj się i wybierz dziedzinę „Master”
  4. Wybierz „Klienci” z bocznego menu
  5. Wybierz klienta „security-admin-console” z wyświetlonej listy
  6. Zmień ustawienie „Prawidłowe identyfikatory URI przekierowania” z /auth/admin/master/console/*na /yourchange/auth/admin/master/console/*
  7. Zapisz i wyloguj się. Po wylogowaniu się ponownie pojawi się komunikat „Nieprawidłowy adres URL przekierowania”.
  8. Teraz umieść oryginalną zmianę <web-context>yourchange/auth</web-context>w standalone.xml Uruchom ponownie Keycloak i przejdź do strony logowania (która jest teraz /yourchange/auth/admin)
  9. Zaloguj się i ciesz się

1
alternatywnie możesz edytować tabelę redirect_urisw DB i dostosowywać pola wartości
pHiL

4

Zaloguj 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_uriwyświetlonej wartości i wklejenie jej w * Valid Redirect URIspolu klienta na stronie konsoli administratora Keycloak. Żądany identyfikator URI jest wtedy jednym z możliwych do zaakceptowania.


2

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!


Czy możesz wyjaśnić, jak to się robi
Subin Babu

2

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 / *


2

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.


2

U mnie brakowało końcowego ukośnika /w wartości forValid Redirect URIs



1

Musisz sprawdzić konsolę administratora Keycloak pod kątem konfiguracji fronted. Musi być nieprawidłowo skonfigurowany dla adresu URL przekierowania i źródeł internetowych.


1

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.


1

Ten błąd jest również generowany, gdy użytkownik nie ma przypisanej roli w definicji użytkownika (lista rozwijana Ustaw rolę dla dziedziny).


0

Twój identyfikator URI przekierowania w kodzie (keycloak.init) powinien być taki sam, jak identyfikator URI przekierowania ustawiony na serwerze Keycloak (klient -> Valid Uri) kliknij, aby wyświetlić obraz mojego kodu kliknij, aby wyświetlić moje ustawienia Keycloak


0

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


0

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 Realmi 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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.