плохо знакомы с 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, который браузер получил от логина (который сейчас работает).
Как мне это сделать? Какой тупо очевидный шаг я пропустил!?