Как я могу выполнить аутентификацию back-end-to-service с KeycloakAdapter, используя предоставление учетных данных вместо аутентификации пользователя? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть приложение, которое состоит из внешнего интерфейса Angular, внутреннего загрузочного модуля и службы REST, где я получаю свои ресурсы и данные.Все защищено тем же экземпляром Keycloak.До сих пор я аутентифицировал приложение с токеном-носителем, который создается во внешнем интерфейсе, затем устанавливается в качестве заголовка для бэкэнда с пружинной загрузкой, который затем отправляет его службе через KeycloakRestTemplate.

проблема, с которой я сталкиваюсь при таком подходе, заключается в том, что аутентификация зависит от пользователя, существовавшего до выполнения какой-либо работы бэкэндом.Из того, что я знаю, есть способ аутентификации с использованием credentials.secret, но я не уверен, как это сделать, и не могу найти на нем никаких ресурсов.

Конфигурация Keycloak существует водна область, где у сервера весенней загрузки есть клиент resource: cl-gui, а у остальных - другой клиент resource: cl-data

Вот мой SecurityConfig:

    @Configuration
    @ComponentScan(
            basePackageClasses = KeycloakSecurityComponents.class,
            excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.keycloak.adapters.springsecurity.management.HttpSessionManager"))
    @EnableWebSecurity
     public class SecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter 

    {

        @Value("${application.production:true}")
        Boolean isProduction;

        private final KeycloakClientRequestFactory keycloakClientRequestFactory;

        public SecurityConfiguration(KeycloakClientRequestFactory keycloakClientRequestFactory) {
            this.keycloakClientRequestFactory = keycloakClientRequestFactory;

            // SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL); 
        }

        /**
         * Registers the KeycloakAuthenticationProvider with the authentication manager.
         */
        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth) {
            KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
            keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
            auth.authenticationProvider(keycloakAuthenticationProvider);
        }

        @Bean
        public KeycloakRestTemplate keycloakRestTemplate() {
            return new KeycloakRestTemplate(keycloakClientRequestFactory);
        }

        /**
         * 
         * Load Keycloak configuration from application.properties or application.yml
         */
        @Bean
        public KeycloakConfigResolver keycloakConfigResolver() {
            return new KeycloakSpringBootConfigResolver();
        }

        /**
         * Defines the session authentication strategy.
         */
        @Bean
        @Override
        protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
            return new NullAuthenticatedSessionStrategy();
        }

        @Bean
        public FilterRegistrationBean keycloakAuthenticationProcessingFilterRegistrationBean(
                KeycloakAuthenticationProcessingFilter filter) {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
            registrationBean.setEnabled(false);
            return registrationBean;
        }

        @Bean
        public FilterRegistrationBean keycloakPreAuthActionsFilterRegistrationBean(
                KeycloakPreAuthActionsFilter filter) {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
            registrationBean.setEnabled(false);
            return registrationBean;
        }

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            super.configure(http);

            if (isProduction) {
                http.csrf()
                        .disable()
                        .sessionManagement()
                        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                        .sessionAuthenticationStrategy(sessionAuthenticationStrategy())
                        .and()
                        .authorizeRequests()
                        .antMatchers("/**").hasRole("ROLE_USER")
                        .anyRequest().permitAll();
            } else {
                http.csrf().disable().authorizeRequests().anyRequest().permitAll();
            }


     }
  }

Зависимости Keycloak:

    <!--  Keycloak -->
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-security-adapter</artifactId>
    </dependency>

Как лучше всего получать информацию в таком приложении, где вы получаете данные из сервиса без аутентификации пользователя?(аутентификация клиента под ключ)

...