Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

401 quando não enviar token

Notei que quando o token não for enviado, a API retorna 403 Forbidden. Acredito que o ideal seja retornar 401 para esse caso, como posso fazer isso? E por que isso acontece?

Obs: já vi posts comentando de configurar um authenticationEntryPoint customizado, porém ao testar, sempre é retornado 401, até mesmo quando o usuário está autenticado mas não possui permissão (role) para acessar tal recurso.

3 respostas
solução!

Olá Arthur, tudo bem?

Entendo sua dúvida e posso te ajudar com isso.

O erro 403 Forbidden é retornado quando o cliente faz uma solicitação válida, mas o servidor se recusa a responder. Já o erro 401 Unauthorized é retornado quando o cliente não está autenticado e precisa fornecer credenciais válidas para acessar o recurso.

Para retornar o erro 401 quando o token não é enviado, você pode configurar um authenticationEntryPoint customizado no Spring Security. Dessa forma, quando o cliente tentar acessar um recurso protegido sem enviar o token, o authenticationEntryPoint personalizado será chamado e retornará o erro 401.

Um exemplo de como configurar um authenticationEntryPoint personalizado no Spring Security seria:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/api/**").authenticated()
            .and()
            .exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }
}

No exemplo acima, a classe JwtAuthenticationEntryPoint é o authenticationEntryPoint personalizado que retorna o erro 401 quando o token não é enviado.

Espero ter ajudado e bons estudos!

Boa ideia! Obrigado!

Por nada amigo, bons estudos