2
respostas

Autenticação com oAuth2

Bom dia, estou a tentar fazer uma autenticação usando oAuth2. Neste momento queria que fosse possivel aceder a todas as rotas sem ser necessario autenticação, mas recebo sempre o erro 401. Há algo de errado no codigo?

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    
    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http.csrf(csrf -> csrf.disable())
                .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .authorizeHttpRequests(req -> {
                    req.anyRequest().permitAll();
                })
//				.oauth2ResourceServer(server -> {
//					server.jwt(jwt -> {
//						jwt.jwtAuthenticationConverter(getJwtAuthenticationConverter());
//					});
//				})
                .build();
    }
}

Dependencias:

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
2 respostas

Oi Mauro, tudo bem?

Pelo que vejo no seu código, você está no caminho certo para permitir o acesso a todas as rotas sem autenticação. No entanto, pode haver outros fatores que estão causando o erro 401.

Um possível motivo para o erro 401 pode ser a configuração do seu servidor. Se o servidor estiver configurado para exigir autenticação, mesmo que você tenha configurado o Spring Security para permitir todas as solicitações, o servidor ainda poderá rejeitar solicitações não autenticadas.

Outra possibilidade é que algum outro filtro de segurança esteja sendo aplicado antes do seu filtro personalizado. Isso pode acontecer se você tiver outros @Configuration e @EnableWebSecurity em algum lugar do seu código.

Por exemplo, se você tiver outra classe de configuração de segurança como esta:

@Configuration
@EnableWebSecurity
public class AnotherSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .anyRequest().authenticated();
    }
}

Neste caso, a configuração anyRequest().authenticated() será aplicada antes da sua configuração anyRequest().permitAll(), e todas as solicitações serão rejeitadas com erro 401.

Recomendo que você verifique a configuração do seu servidor e procure por outras classes de configuração de segurança que possam estar interferindo na sua.

Um abraço e bons estudos.

Olá, Não possuo mais nenhum filtro, então o problema deve ser do servidor. Estou a usar keycloak, tem alguma ideia de como posso resolver?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software