Запуск пользовательских интерфейсов и API за привратником keycloak - PullRequest
3 голосов
/ 08 октября 2019

плохо знакомы с keycloak и аутентификацией в целом, так что извините за то, что упустил что-то очевидное и не использовал точную терминологию.

Я пытаюсь запустить простой Angular UI, который взаимодействует с API Java (dropwizard),Я хотел бы, чтобы оба из них нуждались в аутентификации. Я (почти) могу заставить их работать нормально за брелоком-ключом и привратником-брелком, используя одну область и конфиденциальный клиент. В этом случае у привратника есть upstream-url, который является экземпляром traefik, который затем направляется в интерфейсный контейнер интерфейса пользователя или API. Примерно так:

Gatekeeper upstream-url ----> Traefik (my.domain/*)  ----> UI (my.domain/ui/*)
                                                     \---> API (my.domain/api/*)

Это работает нормально до истечения времени ожидания сеанса, и когда пользователь на (уже загруженной) странице пользовательского интерфейса нажимает кнопку, которая пытается отправить ajax-запрос на попадание в API (например, https://my.domain/api/getstuff), затем Gatekeeper перенаправляет (т. Е. 301) это на страницу входа в keycloak.Это перенаправление немного бессмысленно для запроса API ...

На этом этапе мои проекты пользовательского интерфейса и API являются авторизованнымиagnostic (т. е. пока они не работают ни с одним из адаптеров и т. д. - я полагаюсь на настройку докера, чтобы на данный момент предотвратить «прямой» доступ к пользовательскому интерфейсу и API. Я добавлю адаптеры, как только мне потребуется кое-что узнать оuser). Я вижу в https://www.keycloak.org/docs/latest/securing_apps/index.html#configuration-options опцию autodetect-bearer-only, которая, по-видимому, описывает мою проблему, т.е.

. Она позволяет перенаправлять неаутентифицированных пользователей веб-приложения на вход Keycloakстраницу, но вместо этого отправьте код состояния HTTP 401 неаутентифицированным клиентам SOAP или REST, поскольку они не будут понимать перенаправление на страницу входа

, но, похоже,pply на уровне адаптера, т.е. после привратника в моем сценарии. это тоже похоже похоже.

Я думаю, что я хочу, чтобы запросы доступа без аутентификации (например, никогда не вошли в систему или по тайм-ауту) к https://my.domain/ui/* были перенаправлены на страницу входа в keycloak,но https://my.domain/api/* до 401.

И с https://my.domain/ui/somepage ajax-запрос до https://my.domain/api/getstuff, чтобы использовать JWT / токен / cookie, который браузер получил от логина (который сейчас работает).

Как мне это сделать? Какой тупо очевидный шаг я пропустил!?

1 Ответ

0 голосов
/ 08 октября 2019

К сожалению, вы не можете сказать Gatekeeper возвращать 401 (403) код ответа вместо перенаправления. Существует похожая проблема: https://issues.jboss.org/browse/KEYCLOAK-11082

Что вы можете сделать, это полностью удалить Gatekeeper и внедрить общедоступную аутентификацию клиента во внешнем интерфейсе (адаптер JS) и клиент только для канала-носителя на внутреннем интерфейсе (адаптер Java). Если ваше Java-приложение обслуживает интерфейс, вы можете реализовать только аутентификацию конфиденциального клиента и вернуть ответ 401 (403) для запросов / api / *.

...