1
resposta

Erro 403 - Login não executado

EStou seguindo as práticas do curso Spring Boot 3: aplique boas práticas e proteja uma API Rest, mas estou com um problema na parte de configurações de segurança. No banco de dados, insiro a senha do usuário cadastrado com a hash do Bcrypt mas quando executo o método post no Insomnia para tentativa de login e o mesmo acusa erro 403 de login, mesmo com a senha correta.

Não consigo seguir com a aula sem debugar esse erro.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá Murilo, tudo bem?

Esse erro 403 (Forbidden) geralmente indica que a autenticação falhou ou que as permissões necessárias não foram concedidas. Vamos revisar alguns pontos importantes para resolver esse problema.

  1. Configuração de Segurança:
    • Certifique-se de que o endpoint /login está permitido para todos os usuários. Você pode fazer isso adicionando a configuração authorizeRequests na sua classe de configuração de segurança.
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    return http.csrf(AbstractHttpConfigurer::disable)
            .authorizeRequests(authorizeRequests -> 
                authorizeRequests.antMatchers("/login").permitAll() // Permitir acesso ao endpoint de login
                .anyRequest().authenticated()
            )
            .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .build();
}
  1. Classe de Usuário:

    • Certifique-se de que a implementação da interface UserDetails está correta. Parece que está tudo certo com a classe Usuario, mas verifique se todos os métodos necessários estão implementados corretamente.
  2. Autenticação:

    • Verifique se o método de autenticação está configurado corretamente. Você pode adicionar um UserDetailsService para carregar os detalhes do usuário.
@Service
public class UsuarioService implements UserDetailsService {
    
    @Autowired
    private UsuarioRepository usuarioRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        return usuarioRepository.findByLogin(username)
                .orElseThrow(() -> new UsernameNotFoundException("Usuário não encontrado"));
    }
}
  1. Configuração de Autenticação:
    • Certifique-se de que o UserDetailsService está sendo usado na configuração de segurança.
@Bean
public AuthenticationManager authenticationManager(HttpSecurity http, BCryptPasswordEncoder bCryptPasswordEncoder, UserDetailsService userDetailsService) 
        throws Exception {
    return http.getSharedObject(AuthenticationManagerBuilder.class)
            .userDetailsService(userDetailsService)
            .passwordEncoder(bCryptPasswordEncoder)
            .and()
            .build();
}
  1. Encoder de Senha:
    • Verifique se o encoder de senha está configurado corretamente. Parece que você já está usando o BCryptPasswordEncoder, o que é ótimo.
@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

Se todos esses pontos estiverem corretos e o problema persistir, pode ser útil que você compartilhe todo o seu projeto, via GitHub ou Drive do Google, para que eu realize testes para identificar o que está causando esse problema.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.