DB에 저장하는 것은 매우 일반적인 습관입니다. 만료 된 토큰을 잠시 정리해야합니다 (어쩌면 새 타이머를 삽입 할 때). 토큰을 메모리 내 캐시 (EhCahe
이 마음에 듭니다)에 저장하고 그에 따라 만료 시간을 설정할 수도 있지만 이렇게하면 응용 프로그램이 종료 될 때 캐시가 손실됩니다. 예, 캐시를 영구적으로 만들 수는 있지만 DB 경로를 선택하지 않는 이유는 무엇입니까?
그렇다면 토큰을 어디에도 저장하지 말고 URL 매개 변수로 전자 메일과 링크를 보내고 추가 매개 변수로 소금에 절인 해시를 보내십시오. 링크를 클릭하면 해시가 일치하는지 확인할 수 있습니다. 일치하는 경우 전자 메일 매개 변수가 조정되지 않았으므로 유효성 검사로 표시 할 수 있습니다. 펜타곤 수준의 보안은 아니지만 전자 메일 유효성 검사에 충분할 수 있으며 모든 것을 더 쉽게 만듭니다. 의사 코드에서 : 더이 아이디어를 복용하지만 더와,
String email = httpRequest.getParameter("email");
String receivedHash = httpRequest.getParameter("hash");
if (hash(email).equals(receivedHash)) {
//the user didn't do anything funny, mark email as valid
}
을 또는 :의 길에
public String hash(String email) {
MessageDigest digester = MessageDigest.getInstance("SHA-256");
digester.update(email.getBytes(StandardCharsets.UTF_8)));
digester.update("RanDOmComplCatEdSalt647826583745".getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(digester.digest());
}
String email = "[email protected]";
sendEmailWithLink("/verify?email=" + email + "&hash=" + hash(email));
, 당신은 단지 해시가 일치하는 경우 계산하고 확인하는 똑같은 일을 보안을 사용하면 이메일을 포함하고 적절하게 암호화 된 JWT와 같은 것을 생성 할 수 있습니다.
큰 충고, 고마워. – Darlyn