DelegatingPasswordEncoder

정민교·2022년 11월 21일
0

DelegatingPasswordEncoder에 대한 실습 내용을 진행하던 중에 발견한 사실(?)에 대해서 적어보고자 한다.

DelegatingPasswordEncoder

DelegatingPasswordEncoder는 Spring Security에서 지원하는 PasswordEncoder 구현 객체를 생성해주는 컴포넌트이다.
DelegatingPasswordEncoder 객체를 생성할 때 우리가 Map<String, PasswordEncoder>로 PasswordEncoder 구현 객체들을 Map에 저장하고 특정 PasswordEncoder를 찾기 위한 키를 지정하여 애플리케이션에서 사용할 PasswordEncoder를 결정할 수 있다.

이상한 점(?)

이 코드에서 마지막으로 passwordEncoder로 할당(?)한 것이 "sha256" 해싱 알고리즘을 사용한(?) passwordEncoder라고 생각했고,

passwordEncoder.matches("hello", passwordX);
부분으로 쭉 원본 비밀번호와 암호화된 비밀번호가 일치하는지 확인하는 문장에서 마지막 문장만 true일 것으로 예상했는데 전부 다 true가 나왔다.

그래서 코드를 뜯어봤는데
DelegatingPasswordEncoder를 생성할 때 Map<String, PasswordEncdoer>를 파라미터로 넘겨줘서 생성한게 DelegatingPasswordEncoderidToPasswordEncoder라는 필드에 할당이 되는 것을 확인했다.

DelegatingPasswordEncdoermatches 메소드를 호출하게 되면 암호화된 password에 있는 prefix를 문자열로 추출해서 idToPasswordEncoder의 키로 조회한다.

그 후에 암호화된 password에 있는 suffix부분부터 끝까지 잘라서 문자열로 반환하고 조회한 passwordEncodermatches 메소드로 rawPasswordencodedPassword를 파라미터로 넘겨줘서 검증한다.

그래서 결국 다 true가 나오는 것이 당연하다!

profile
백엔드 개발자

0개의 댓글