У меня есть приложение весенней загрузки, которое скрыто за обратным прокси. Когда пользователь отправляет запрос на ресурс без авторизации, он перенаправляется на страницу входа в keycloak с параметром redirect_uri
, установленным, например, на http://some_url/sso/login
(URL-адрес всегда относится к контекстному пути). Мне нужно изменить этот URL-адрес на что-то вроде http://some_url/api/my_api/sso/login
, чтобы обратный прокси-сервер знал, куда перенаправить такой запрос. Есть идеи, как этого добиться? Есть ли какой-либо параметр конфигурации адаптера keycloak для его установки (я его не нашел) или какой-либо компонент необходимо перезаписать?
Я отвечу на свой вопрос, так как мне удалось найти решение (на случай, если кто-то в будущем столкнется с подобной проблемой). Итак, в основном нужны две вещи:
@Bean
@Override
protected KeycloakAuthenticationProcessingFilter keycloakAuthenticationProcessingFilter() throws Exception {
RequestMatcher requestMatcher =
new OrRequestMatcher(
new AntPathRequestMatcher("/custom_url/sso/login"),
new RequestHeaderRequestMatcher("Authorization"),
new QueryParamPresenceRequestMatcher("access_token"),
new AdapterStateCookieRequestMatcher());
return new KeycloakAuthenticationProcessingFilter(authenticationManagerBean(), requestMatcher);
}
@Override
protected void configure(final HttpSecurity http) throws Exception {
KeycloakAuthenticationEntryPoint entryPoint = (KeycloakAuthenticationEntryPoint)authenticationEntryPoint();
entryPoint.setLoginUri("/custom_url/sso/login");
super.configure(http);
http
.authorizeRequests()
//...
.and()
.exceptionHandling()
.authenticationEntryPoint(entryPoint)
.and()
.csrf().disable();
}
Для тех, кто реализует это, класс шага 1, по-видимому, расширяет KeycloakWebSecurityConfigurerAdapter.