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

Criptografia e melhores práticas para Armazenar Senhas

Professor, gostaria de tirar uma dúvida sobre implementação de cadastro de novo usuário no sistema. Poderia me indicar alguma direção ou material de estudo para aprofundar nesse assunto? Como posso criar um endpoint "/sign-in" que armazene senhas criptografadas no banco de dados? Gostaria de aprender a como gerar o hash da senha no momento do cadastro e como comparar esse hash com a senha digitada pelo usuário no momento do login?

Quais são as melhores práticas para esta implementação?

Agradeço desde já pela sua ajuda!

Suas aulas são excelentes.

2 respostas
solução!

Olá Leandro,

Fico feliz que esteja gostando das aulas! Vamos lá, vou te ajudar com a implementação do endpoint "/sign-in" para armazenar senhas criptografadas e seguir as melhores práticas de segurança.

Implementar o Endpoint de Cadastro:

@RestController
@RequestMapping("sign-in")
public class CadastroUsuarioController {

    @Autowired
    private UsuarioRepository usuarioRepository;

    @Autowired
    private PasswordEncoder passwordEncoder;

    @PostMapping
    @Transactional
    public ResponseEntity<?> cadastrar(@RequestBody @Valid DadosCadastroUsuario dados) {
        Usuario usuario = new Usuario();
        usuario.setLogin(dados.login());
        usuario.setSenha(passwordEncoder.encode(dados.senha()));
        usuarioRepository.save(usuario);
        return ResponseEntity.ok();
    }
}

Obs: Essa lógica poderia ser isolada em uma classe service e ter outras validações.

A comparação da senha, durante a requisição para efetuar login, é feita pelo próprio spring Security automaticamente.

Espero ter ajudado e bons estudos!

Muito obrigado professor. Isso é exatamente o que eu estava procurando!