Настройка ключей, spring и / sso / URL для входа

#java #spring #keycloak

#java #spring #keycloak

Вопрос:

У меня есть приложение spring boot, которое скрыто за обратным прокси. Когда пользователь отправляет запрос на ресурс без авторизации, он перенаправляется на страницу входа в keycloak с redirect_uri параметром, установленным, например http://some_url/sso/login , (URL-адрес всегда относится к контекстному пути). Мне нужно изменить этот URL-адрес на что-то вроде http://some_url/api/my_api/sso/login , чтобы обратный прокси знал, куда перенаправить такой запрос. Есть идеи, как этого добиться? Есть ли какой-либо параметр конфигурации адаптера keycloak для его установки (я его не нашел) или какой-либо компонент необходимо перезаписать?

Ответ №1:

Я отвечу на свой вопрос, поскольку мне удалось найти решение (на случай, если кто-нибудь в будущем столкнется с подобной проблемой). Итак, в основном необходимы две вещи:

  1. Перезапишите компонент KeycloakAuthenticationProcessingFilter, установив пользовательский URL-адрес в сопоставителе запросов:
 @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);
    }
 
  1. Установите правильную точку входа для аутентификации:
 @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. Для тех, кто реализует это, класс шага 1, похоже, расширяет KeycloakWebSecurityConfigurerAdapter.