5
respostas

Autenticação sem encriptar a senha

Tem uma maneira de autenticar a senha sem utilizar "passwordEncoder" ? No caso de eu receber a senha já criptografada do client como eu faria? visto que o método abaixo requer um encoder.

@Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(authenticationService).passwordEncoder(new BCryptPasswordEncoder());
    }
5 respostas

Fala Everton, tudo bem?

Não sei se entendi sua dúvida...usando o passwordEncoder é para o cliente passar a senha já criptografada. Daria para não usar esse método e passar a senha aberta, acho que é isso que você perguntou, correto?

Olá Otavio, tudo bem! Nas aulas nos utilizamos o programa Postman para fazer a autenticação na API passando no body um json com usuário e senha.

{
    "user": "username",
    "password": "123456"
}

Minha dúvida é caso eu receba o campo senha já criptografado no json:

{
    "user": "everton",
    "password": "$2a$10$lOPI2v4iBQp/qiOy.lUmLeIR79E4GMU/fyvnUNz5qRzrmKj2wCEDq"
}

Como trataria este cenário?

Oi Everton,

No seu caso então você deve configurar como password encoder a classe NoOpPasswordEncoder:

@Override 
protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth.userDetailsService(authenticationService).passwordEncoder(new NoOpPasswordEncoder());
}

Essa implementação é considerada como não segura, pois não faz encoding nenhum, mas no seu caso como a senha já vem encriptada acho que não tem problemas.

Bons estudos!

Olá Rodrigo, Com NoOpPasswordEncoder deu certo porém, a diferença é que, ao invés de usar o new tive que colocar getInstance()

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(authenticationService).passwordEncoder(NoOpPasswordEncoder.getInstance());
    }

Um detalhe é que "NoOpPasswordEncoder" está marcado como deprecated, não sei se o spring disponibilizará uma alternativa.

Obrigado!

Oi Everton,

Ah sim, não tem construtor a classe, é via método getInstance() mesmo.

Ela está deprecated justamente por não ser considerada uma classe segura, pois não faz encoding da senha.