PasswordEncoder:
。입력된 비밀번호 문자열에단방향 인코딩(Hashing 알고리즘:scrypt,bcrypt,argon2, ... )을 적용하여Hashing을 수행하는 기능을 상속하는Spring Security의인터페이스
▶PasswordEncoder를 구현한 Class는 문자열에 대해Hashing을 수행하며 수행된Hash값은DB에 저장됨.
。PasswordEncoder를 구현한 Class는Hashing을 통한 단방향변환을 수행하므로Encoding처럼 복원이 불가능.
▶Encoder명칭에 혼동 주의.
Spring Bean으로 등록
。WebSecurityConfiguration을 담당하는@Configuration Class내BCryptPasswordEncoder객체를 생성하여PasswordEncoder type으로Spring Bean으로 등록하는@Bean Method를 정의
▶ 이후UserDetails에서 활용// @Configuration @Bean public PasswordEncoder passwordEncoderB(int strength){ return new BCryptPasswordEncoder(strength); }
PasswordEncoder 구현체:Hash Algorithm
。BCryptPasswordEncoder,Argon2PasswordEncoder,SCryptPasswordEncoder
▶구현체는User.passwordEncoder(람다식)에 활용되어 입력되는문자열에 대해Hashing을 수행.private UserDetails getUserDetails(String username, String password,roles role){ // User.passwordEncoder(람다식)을 통해 input된 문자열을 PasswordEncoder 구현 Class를 통해 // `Hashing`으로 Encoding을 수행하여 Hash값을 반환. return User.builder().passwordEncoder((input)-> passwordEncoderB().encode(input) ).username(username).password(password).roles(role.toString(),"DEVELOPER").build(); }▶
Hash알고리즘의 Instance를 생성하여PasswordEncoder의 구현체로서Spring Bean으로 반환하는@Bean Method를 활용.
BCryptPasswordEncoder(강도):
new BCryptPasswordEncoder(강도)
。Spring Security에서 기본제공하면서BCrypt hashing Algorithm을 사용하는PasswordEncoder 인터페이스 구현체
▶BCrypt hashing function을 활용해서비밀번호 암호화및 DB의 저장된 비밀번호와 일치 여부를 확인해주는검증 메서드(PasswordEncoder구현Class.matchers()) 를 포함
。PasswordEncoder구현Class.encode(),PasswordEncoder구현Class.matchers(),PasswordEncoder구현Class.upgradeEncoding()의 Method가 존재.
。생성자에Hashing작업량의 강도를 설정하는 숫자를 반영. ( 기본값 :10)
passwordEncoder객체.matches(평문패스워드 , 암호화패스워드)
。로그인시사용자에 의해 입력된Raw Password와 해당PasswordEncoder에 의해암호화되어DB에 저장된Hash Password에 대한비교검증을 수행하는메서드