keycloak Недійсний параметр: redirect_uri


87

Коли я намагаюся натиснути з мого API для автентифікації користувача з маніпулятора, але це видає мені помилку Недійсний параметр: redirect_uri на сторінці макросу. Я створив своє власне царство, крім господаря. keycloak працює на http. Будь ласка, допоможи мені.


під час перевірки елемента інспекції показало 500 помилок
VIJAY THAKUR

2
Будь ласка, не публікуйте одне і те ж питання кілька разів. Якщо ви хочете додати більше деталей до свого оригінального запитання, ви можете зробити це, натиснувши "редагувати" безпосередньо під своїм запитанням.
Телпер

2
Можливий дублікат недійсного параметра
Keycloak

1
Перевірте наявність https проти http в URL
адресі

1
У моєму випадку це була німа помилка: "<IP-адреса>" замість "http: // <IP-адреса>"
SwissNavy

Відповіді:


56

У мене спрацювало додавання символу Wild * " . Незважаючи на те, що стосовно побудови виробництва, я буду більш конкретний щодо цінності цього поля. Але для цілей розробника ви можете це зробити.

введіть тут опис зображення

Налаштування доступне в розділі, адміністративна консоль клавіатури -> Realm_Name -> Cients -> Client_Name .

РЕДАГУВАТИ: НЕ РОБІТЬ ЦЕ НА ВИРОБНИЦТВІ. Це створює великий недолік безпеки.


13
Ця відповідь може бути небезпечним недоліком безпеки, тому ви відкриваєте двері для небезпечної атаки перенаправлення.
Майкл Курсі,

Я не можу повірити, що ця відповідь наразі має найбільші голоси. Це далеко не рішення, і воно насправді повинно з’являтися лише в коментарях. З іншого боку, у запитанні занадто мало інформації, щоб навіть спробувати відповісти.
bsaverino

Що ми повинні туди покласти, якщо ми використовуємо Keycloak із мобільного додатка (кодований React Native)?
Себастьян Діас,

35

Якщо ви .Net Devloper, будь ласка, перевірте нижче Конфігурації keycloakAuthentication параметри класу set CallbackPath = RedirectUri, // це Властивість потрібно встановити іншим чином, воно покаже недійсну помилку перенаправлення

Я зіткнувся з тією ж помилкою. У моєму випадку проблема полягала в дійсних переадресаційних URI-адресах . Отже, ці кроки я виконав.

Перший вхід в keycloack як адміністратор. Потім виберіть своє царство (можливо, ви автоматично перенаправите його). Тоді ви побачите нижче екран

введіть тут опис зображення

Виберіть Клієнти на лівій панелі. Потім виберіть відповідного клієнта, який ви налаштували для своєї програми. За замовчуванням ви перейдете на вкладку Налаштування , якщо не виберіть її. Мій додаток працював на порту 3000, тому моє правильне налаштування наведено нижче. скажімо, у вас є програма, яка працює на localhost: 3000, тож налаштування мають бути такими

введіть тут опис зображення


19

Якщо ви отримуєте цю помилку через нове царство, яке ви створили

У URL-адресі, на яку ви переспрямовані (можливо, вам доведеться шукати в інструментах розробника Chrome для цієї URL-адреси), змініть область з masterтієї, яку ви щойно створили, а якщо ви не використовуєте https, переконайтеся, що також використовується redirect_uri http.

Якщо ви отримуєте цю помилку, оскільки намагаєтеся встановити Keycloak у загальнодоступному домені (не на localhost)

Крок 1) Дотримуйтесь цієї документації, щоб налаштувати базу даних MySql. Можливо, вам також доведеться звернутися до офіційної документації .

Крок 2) Запустіть командуupdate REALM set ssl_required = 'NONE' where id = 'master';

Примітка: На даний момент ви технічно повинні мати можливість входу, але версія 4.0 Keycloak використовує https для перенаправлення uri, хоча ми щойно вимкнули підтримку https. Поки Keycloak цього не виправить, ми можемо обійти це за допомогою зворотного проксі-сервера. Зворотний проксі - це те, що ми все одно хочемо використовувати для легкого створення сертифікатів SSL / TLS, не турбуючись про сховища ключів Java.

Примітка 2. З того часу Keycloak вийшов із власним проксі. Я ще не пробував цього, але на цьому етапі, можливо, ви захочете перестати слідувати моїм вказівкам і перевірити (воротар ключів) [ https://www.keycloak.org/downloads.html] . Якщо у вас виникли проблеми з налаштуванням Keycloak Gatekeeper, я дотримуватимусь інструкцій щодо налаштування зворотного проксі-сервера за допомогою Apache.

Крок 3) Встановіть Apache. Ми будемо використовувати Apache як зворотний проксі (я спробував NGINX, але NGINX мав певні обмеження, які заважали). Дивіться yum встановлення Apache (CentOs 7) і apt-get install Apache (Ubuntu 16), або знайдіть інструкції для вашого конкретного дистрибутива.

Крок 4) Запустіть Apache

  • Використовуйте sudo systemctl start httpd(CentOs) або sudo systemctl start apache2(Ubuntu)

  • Використовуйте sudo systemctl status httpd(CentOs) або sudo systemctl status apache2 (Ubuntu), щоб перевірити, чи працює Apache. Якщо ви бачите в зеленому тексті слова active (running)або якщо останній запис читає, Started The Apache HTTP Server.тоді ви добре.

Крок 5) Ми встановимо з'єднання SSL із зворотним проксі-сервером, а потім зворотний проксі-сервер зв'яжеться з keyCloak через http. Оскільки цей HTTP-зв'язок відбувається на тій самій машині, ви все ще в безпеці. Ми можемо використовувати Certbot для налаштування автоматичного поновлення сертифікатів.

Якщо цей тип шифрування недостатньо хороший, і ваша політика безпеки вимагає наскрізного шифрування, вам доведеться з'ясувати, як налаштувати SSL через WildFly , замість використання зворотного проксі-сервера.

Примітка: Насправді я ніколи не міг змусити https правильно працювати з порталом адміністратора. Можливо, це могла бути лише помилка в бета-версії Keycloak 4.0, яку я використовую. Ви вважаєте, що зможете встановити рівень SSL так, щоб він вимагався лише для зовнішніх запитів, але це, здається, не спрацювало, саме тому ми встановили для https значення none на кроці 2. Відтепер ми будемо продовжувати використовувати http через тунель SSH для управління налаштуваннями адміністратора.

Крок 6) Всякий раз, коли ви намагаєтесь відвідати сайт через https, ви запускаєте політику HSTS, яка автоматично примушує http-запити перенаправляти на https. Дотримуйтесь цих вказівок, щоб очистити правило HSTS від Chrome , а потім поки що більше не відвідувати https-версію сайту.

Крок 7) Налаштування Apache. Спочатку знайдіть, де знаходиться ваш файл httpd.conf . Ваш файл httpd.conf, ймовірно, містить конфігураційні файли з окремого каталогу. У моєму випадку я знайшов весь конфігураційний файл у conf.dкаталозі, який знаходиться поруч із папкою, в якій знаходився файл httpd.conf.

Після того, як ви знайдете свої файли конф., Змініть або додайте наступні записи віртуального хосту у файли конф. Переконайтеся, що ви не перевизначаєте вже наявні параметри SSL, створені certbot. Завершивши, ваш конфігураційний файл повинен виглядати приблизно так.

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

Крок 8) Перезапустіть Apache. Використовуйте sudo systemctl restart httpd(CentOs) або sudo systemctl restart apache2(Ubuntu).

Крок 9) Перш ніж ви зможете спробувати увійти на сервер, оскільки ми сказали Keycloak використовувати http, нам потрібно встановити інший спосіб безпечного підключення. Це можна зробити, встановивши службу VPN на сервері маски, або за допомогою SOCKS. Я використовував проксі SOCKS. Для цього спочатку потрібно налаштувати динамічну переадресацію портів.

ssh -N -D 9905 user@example.com

Або налаштуйте його за допомогою Putty .

Весь трафік, відправлений до порту 9905, тепер буде надійно перенаправлений через тунель SSH на ваш сервер. Переконайтеся, що ви включили в білий список порт 9905 на брандмауері вашого сервера.

Після налаштування динамічної переадресації портів вам потрібно буде налаштувати браузер на використання проксі-сервера SOCKS на порту 9905. Інструкції тут .

Крок 10) Тепер ви повинні мати можливість входу на портал адміністратора Keycloak. Щоб підключитися до веб-сайту, перейдіть за адресою http://127.0.0.1 , і проксі-сервер SOCKS переведе вас на консоль адміністратора. Не забудьте вимкнути проксі-сервер SOCKS, коли закінчите, оскільки він використовує ресурси вашого сервера, і призводить до зниження швидкості Інтернету для вас, якщо продовжувати працювати.

Крок 11) Не питайте мене, скільки часу знадобилося мені, щоб зрозуміти все це.


1
Це був рядок, який привернув мою увагу: # змінити параметри https redirect_uri на http RewriteCond% {request_uri} \?% {Query_string} ^ (. *) Redirect_uri = https (. *) $ RewriteRule. % 1redirect_uri = http% 2 [NE, R = 302] Я використовую nginx, але, як тільки я замінив https на http у redirect_uri, він спрацював.
Тельмо Діас

9

Перейдіть до адміністративної консолі keycloak> SpringBootKeycloak> Cients> сторінка програми входу. Тут у розділі дійсного перенаправлення uris додайте http: // localhost: 8080 / sso / login

Це допоможе вирішити непряму проблему-uri


13
Проблема в тому, що консоль адміністратора недоступна.
SmallChess

Я отримав цю проблему після того, як змінив web-contextналаштування Keycloak
Марк

5

Якщо ви помітили цю проблему після того, як внесли зміни до контекстного шляху Keycloak, вам доведеться внести додаткові зміни до налаштування URL-адреси перенаправлення:

  1. Зміна <web-context>yourchange/auth</web-context>назад <web-context>auth</web-context>в standalone.xml
  2. Перезапустіть Keycloak і перейдіть на сторінку входу ( /auth/admin)
  3. Увійдіть і виберіть область "Master"
  4. У бічному меню виберіть "Клієнти"
  5. Виберіть клієнт «security-admin-console» із списку, що з’явиться
  6. Змініть "Дійсні переспрямовані URI" з /auth/admin/master/console/*на /yourchange/auth/admin/master/console/*
  7. Збережіть і вийдіть. Після виходу із системи знову з’явиться повідомлення "Недійсна URL-адреса переадресації".
  8. Тепер вставте свою початкову зміну <web-context>yourchange/auth</web-context>в standalone.xml Перезапустіть Keycloak і перейдіть на сторінку входу (яка зараз /yourchange/auth/admin)
  9. Увійдіть і насолоджуйтесь

1
Ви також можете редагувати таблицю redirect_urisв БД і коригувати поля значень
pHiL

4

Увійдіть на веб-сайт консолі адміністратора Keycloak, виберіть область та її клієнта, а потім переконайтеся, що всі URI клієнта мають префікс протоколу, тобто, http://наприклад. Прикладом може бутиhttp://localhost:8082/*

Іншим способом вирішити проблему є перегляд вихідних даних консолі сервера Keycloak, пошук рядка із заявою про відмову в запиті, копіювання з нього redirect_uriвідображеного значення та вставка в * Valid Redirect URIsполе клієнта на веб-сайті консолі адміністратора Keycloak. Тоді запитуваний URI є одним із прийнятних.


2

Я зіткнувся з проблемою Недійсний параметр: redirect_uri проблема, переглядаючи приклад весняного завантаження та клавіатури, доступний за адресою http://www.baeldung.com/spring-boot-keycloak . під час додавання клієнта з сервера keycloak ми повинні надати URI перенаправлення для цього клієнта, щоб сервер keycloak міг здійснити переспрямування. Коли я кілька разів стикався з однією і тією ж помилкою, я слідував за копіюванням правильної URL-адреси з консолі сервера keycloak та надавав її у дійсному просторі URI перенаправлення, і це спрацювало нормально!


Чи можете ви пояснити, як це зроблено
Субін Бабу,

2

навіть я стикався з тим же питанням. Я виправив це, перейшовши до конкретного клієнта в області, відповідно там перенаправлення URL add * після вашої повної URL.

ПРОБЛЕМА БУДЕ ВИРІШЕНА

Приклад: URI перенаправлення: http: localhost: 3000 / myapp / generator / *


2

Я зіткнувся з тим же питанням. Я виправив це, перейшовши до конкретного клієнта в області, відповідно там перенаправлення URL add * після вашої повної URL.


2

Для мене /у значенні for у мене відсутня коса скісна рискаValid Redirect URIs



1

Вам потрібно перевірити консоль адміністратора keycloak на наявність фронтальної конфігурації. Він повинен бути неправильно налаштований для перенаправлення URL-адрес та веб-джерел.


1

Якщо ви намагаєтесь перенаправити на сторінку входу в маскування після виходу з системи (як я був), це не дозволено за замовчуванням, але її також потрібно налаштувати в налаштуваннях "Дійсні перенаправляючі URI" на консолі адміністратора вашого клієнта.


1

Ця помилка також виникає, коли у Вашого Користувача не передбачена роль, делегована у Визначенні Користувача (Встановити роль для Сфера у спадному меню).


0

Ваш URI перенаправлення у вашому коді (keycloak.init) повинен бути таким самим, як і URI перенаправлення, встановлений на сервері Keycloak (клієнт -> дійсний Uri) натисніть, щоб переглянути зображення мого коду клацніть, щоб переглянути налаштування мого клавіатури


0

Переконайтеся, що значення параметра redirect_uri внесено до білого списку для клієнта, який ви використовуєте. Ви можете керувати конфігурацією клієнта через консоль адміністратора.

Uri-адресу для переспрямування має точно відповідати одному з білих списків-редиректів, або ви можете використовувати підстановочний знак у кінці urri-адреси, яку потрібно додати в білий список. Див .: https://www.keycloak.org/docs/latest/server_admin/#_clients

Зауважте, що використання підстановочних знаків для увімкнення білого списку перенаправлення uri дозволено Keycloak, але насправді є порушенням специфікації OpenId Connect. Див. Обговорення цього питання на https://lists.jboss.org/pipermail/keycloak-dev/2018-December/011440.html


0

Здається, ця проблема може виникнути, якщо ви введете пробіли у своє ім'я Королівства. У мене було встановлено ім’я, Debugging Realmі я отримав цю помилку. Коли я змінився на DebuggingRealmце спрацювало.

Ви все ще можете мати пробіли у відображуваному імені. Дивно, що клавіатура не перевіряє це на введенні адміністратором.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.