Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

SecurityFilterChain filterChain para SSO (Single Sign-On)

Como utilizamos um SSO, na nossa aplicação precisamos apenas validar se o Token JWT recebido nas requisições está correto. Mas no desenvolvimento local precisamos simular esse controle, pois o servidor real não aceita requisições de qualquer endereço, apenas do servidor de aplicação autorizado.

Para isso ajustamos no application.properties

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration

E ajustamos

@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        
        http.csrf(csrf -> csrf.disable())
            .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .jee(jee -> jee.disable())
            .formLogin(formLogin ->formLogin.disable())
            .httpBasic(httpBasic -> httpBasic.disable())
            .cors (cors -> cors.configurationSource(corsConfigurationSource()))
            .authorizeHttpRequests(authz -> authz
                .requestMatchers(
                       "/api/mensagemsistema",
                       "/api/error-report",
                       "/api/metrics",
                       "/api/health"
                ).permitAll()
                .requestMatchers("/api/**").authenticated()
            )
        ;
        configureFiltros(http);

        return http.build();
    }

Como eu informo ao Spring Boot / Security que a requisição, com os headers enviados, é autenticada?

No método configureFiltros parece estar havendo algum controle neste propósito, mas na verdade ele usa Filtros...

http.addFilterBefore(myFilter, UsernamePasswordAuthenticationFilter.class);

onde myFilter extende OncePerRequestFilter para nem passar pela validação do Spring Security:

  1. num conjunto específico de rotas (a mesma lista definida em requestMatchers), ou
  2. após fazer a validação do usuário / senha no SSO com sucesso;

Imagino se há uma forma de informar a autenticação com sucesso do SSO diretamente ao Spring Security sem passar por esse filtro?

1 resposta
solução!

Avançando no curso achei a resposta pra minha dúvida. Aula: https://cursos.alura.com.br/course/spring-boot-aplique-boas-praticas-proteja-api-rest/task/117170