Spring Security - PasswordEncoder

TopOfTheHead·2025년 11월 18일

Spring Security

목록 보기
17/21

PasswordEncoder :
。입력된 비밀번호 문자열에 단방향 인코딩 ( Hashing 알고리즘 : scrypt, bcrypt, argon2, ... )을 적용하여 Hashing을 수행하는 기능을 상속하는 Spring Security인터페이스
PasswordEncoder를 구현한 Class는 문자열에 대해 Hashing을 수행하며 수행된 Hash값DB에 저장됨.

PasswordEncoder를 구현한 Class는 Hashing을 통한 단방향변환을 수행하므로 Encoding처럼 복원이 불가능.
Encoder 명칭에 혼동 주의.

  • Spring Bean으로 등록
    WebSecurityConfiguration을 담당하는 @Configuration ClassBCryptPasswordEncoder객체를 생성하여 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에 대한 비교검증을 수행하는 메서드
profile
공부기록 블로그

0개의 댓글