У меня есть веб-приложение Java с внутренним управлением идентификацией и доступом. Теперь он был приостановлен с интеграцией Keycloak.
Рядом с веб-интерфейсом мое приложение также имеет конечную точку REST, такую как /api/authentication/login
(среди прочего, но это начальная точка), которую можно было вызвать ранее для получения токена через: curl -X POST http://localhost:8080/api/authentication/login -H 'Authorization: admin:admin'
.
С интеграцией Keycloak здесь я больше не могу входить в систему через эту конечную точку REST. Меня всегда перенаправляют на страницу входа в Keycloak, что может иметь смысл с точки зрения защиты моего приложения. Но здесь я хочу обойти страницу входа в Keycloak и напрямую проверить учетные данные и вернуть токен, если они совпадают.
Каковы мои варианты для достижения этого?
Кстати: приложение не использует Spring Boot.
Я попытался добавить новый клиент Keycloak OpenID, который будет охватывать домашний URL-адрес /api
, и я также установил для параметра «Аутентификация клиента» значение false
, но безрезультатно, т. Е. Я все еще перенаправляюсь на страницу входа в Keycloak.
Не рекомендуется обходиться без редиректа. Но вы все еще можете достичь с Direct Grant Flow
.
Я бы пошел дальше, чем Дхавал, и сказал бы, что не рекомендуется идти по этому пути.
Пользователи должны аутентифицироваться не через ваш API, а напрямую через сервер авторизации (Keycloak). Ни клиенты (UI), ни серверы ресурсов (REST API) не должны получать доступ к секретам пользователей.
Просто настройте свой клиент (пользовательский интерфейс) для перенаправления пользователей на Keycloak для получения токена доступа и отправки этого токена в качестве заголовка авторизации носителя при отправке запросов к серверам ресурсов (REST API). Используйте для этого клиентскую библиотеку OAuth2 (в конечном итоге помеченную OpenID/OIDC).
См. эти руководства для минимальной настройки Keycloak и настройки безопасности серверов ресурсов Spring: https://github.com/ch4mpy/spring-addons/blob/master/samples/tutorials