Ожидаемый фильтр CORS, который будет применен к предварительной проверке только один раз и позволит последующему запросу пройти через Oauth2ProcessingFilter - PullRequest
0 голосов
/ 25 июня 2019

У меня есть приложение Angular frontend, которое аутентифицировано с помощью Keycloak, и оттуда я вызываю сервер Spring Backend Resource, передавая ему accesss_token для проверки с помощью keycloak. В качестве приложения CORS для бэкенда я добавил @Bean corsConfigurationSource () в WebSecurityConfigAdapterс предпочтением Ordered.HIGHEST PREFERNCE, чтобы иметь приоритет перед Oauth2ProcessingFiter.Initial. Запрос OPTION проходит с заголовком ответа из фильтра CORS, во-вторых, фактический запрос ресурса также через фильтр CORS и OAuth2Processfilter не вызывается, и, следовательно, он является единственным пользователем, даже еслиПользователь в Keycloak.

@EnableWebSecurity
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors().and()
            .authorizeRequests()
           .anyRequest()
           .authenticated();
}

 @Bean

  CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(Arrays.asList("*"));
    configuration.setAllowedHeaders(Arrays.asList("authorization"));
    configuration.setAllowedMethods(Arrays.asList("GET","POST"));
    UrlBasedCorsConfigurationSource source = new 
  UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
 }
 }

  @SpringBootApplication
  @EnableResourceServer
  public class VehicleApplication {

public static void main(String[] args) {
    SpringApplication.run(VehicleApplication.class, args);
}
    }

  application.yml

    security:
    oauth2:
    resource:
    user-info-uri: http://localhost:8080/auth/realms/VMS/protocol/openid- 
     connect/userinfo


     pom.xml
        <dependency>
        <groupId>org.springframework.security.oauth.boot</groupId>
        <artifactId>spring-security-oauth2-autoconfigure</artifactId>
        <version>2.1.6.RELEASE</version>
        </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

Ожидаемый фильтр CORS, который будет применен для предварительной проверки только один раз и разрешить и последующий запрос пройти через Oauth2ProcessingGilter

1 Ответ

0 голосов
/ 27 июня 2019

Решено, Удален фильтр CORS, добавлен proxy.conf.js из Angular, так что это приложение выполняет запрос, а не браузер, а затем фильтр Oauth2Processing проверяет токен с помощью keycloak

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...