Запуск пользовательских интерфейсов и API за привратником keycloak

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

Я пытаюсь запустить простой пользовательский интерфейс Angular, который взаимодействует с API Java (dropwizard). Я бы хотел, чтобы им обоим потребовалась авторизация. Я (почти) могу заставить их нормально работать за keycloak и привратником keycloak, используя единую область и конфиденциального клиента. В этом случае у привратника есть upstream-url, который является экземпляром traefik, который затем направляет в контейнер докеров UI или 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 не зависят от аутентификации (то есть в них пока не запущены никакие адаптеры и т. Д. - я полагаюсь на настройку докера, чтобы предотвратить «прямой» доступ к пользовательскому интерфейсу и API. добавляйте адаптеры, когда мне нужно что-то узнать о пользователе). Я вижу в https://www.keycloak.org/docs/latest/securing_apps/index.html#configuration-options вариант autodetect-bearer-only, который, кажется, описывает мою проблему, т. е.

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

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

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

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

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


person IveGotNoIdea    schedule 08.10.2019    source источник


Ответы (1)