1
resposta

[Projeto] Convertendo Senha com Bcrypt

Como mostrado nas aulas foi feito a inserção já encriptada das senhas. Normalmente as pessoas vão colocar a senha de forma normal e o próprio backend faria essa conversão. No caso como e onde seria feita essa conversão após receber a senha inserida pelo usuário?

Eu tentei efetuar um login com via postman Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E veio esse resultado :

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

@NoArgsConstructor
@Getter
@Setter
@EqualsAndHashCode(of = "id")
@Document
public class User implements Serializable, UserDetails{
    private static final long serialVersionUID = 1L;

    @Id
    private String id;
    private String name;
    private String email;
    private String senha;

    @DBRef (lazy = true)
    private List<Post> posts = new ArrayList<>();

    public User(String id, String name, String email, String senha) {
        this.id=id;
        this.name=name;
        this.email=email;
        this.senha=senha;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return List.of(new SimpleGrantedAuthority("ROLE_USER"));
    }

    @Override
    public String getPassword() {
        return senha;
    }

    @Override
    public String getUsername() {
        return email;
    }

    @Override
    public boolean isAccountNonExpired() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean isEnabled() {
        // TODO Auto-generated method stub
        return true;
    }

}
1 resposta

Oi Gabriel!

Isso mesmo, o usuário vai digitar a senha normal dele (por exemplo: 123456) e o app frontend/mobile envia essa senha digitada para o backend, que é responsável por converter e validar. No caso do nosso projeto isso é feito pelo próprio Spring Security.

O Spring Security faz uma consulta no banco de dados filtrando apenas pelo username e se encontrar um usuário no banco ele pega a senha aberta que foi enviada, converte para Bcrypt e compara com a senha do usuário que está tabela. Se forem iguais, libera a requisição, caso contrário devolve erro.

Isso é feito internamente pelo Spring e fica "escondido" da gente :D