최대 1 분 소요

비밀번호 저장

   Spring Security는 가장 기본적인 사용자 인증 방법인 username, password 입력 인증을 지원한다. 그 중 비밀번호를 암호화 하여 저장하는 것은 아주 중요한데, Spring SecurityPasswordEncoder 인터페이스를 통해 이를 간단하게 사용할 수 있도록 해준다.

   PasswordEncoder 인터페이스는 단방향 알고리즘을 사용하며, 비밀번호 암호화, 비교 등의 역할을 수행한다.

PasswordEncoder 인터페이스

  • String encode(CharSequence rawPassword) - 비밀번호를 암호화한다. 주로 해시 알고리즘을 사용하며, Salt 기법을 적용한다.
  • boolean matches(CharSequence rawPassword, String encodedPassword) - 비밀번호를 비교한다.

   Spring Security에서 권장하는 인코더는 다음과 같다.

  • BCryptPasswordEncoder
    • bcrypt 알고리즘 사용
    • strength 필드를 조절하여 비밀번호 검증 시간 조절 (default 10)
  • Argon2PasswordEncoder
    • Argon2 알고리즘 사용
    • BouncyCastle 라이브러리 필요
  • Pbkdf2PasswordEncoder
    • PBKDF2 알고리즘 사용
    • FIPS 인증이 필요할 때 좋다고 함
  • SCryptPasswordEncoder
    • scrypt 알고리즘 사용
    • BouncyCastle 라이브러리 필요
  • DelegatingPasswordEncoder [Default]
    • Spring Security 권장 기본 인코더
    • 레거시 인코더 사용, 향후 업그레이드 등을 고려해서 나온 클래스
    • 다양한 알고리즘 지원 (기본적으로 bcrypt 알고리즘 사용)
    • PasswordEncoderFactories.createDelegatingPasswordEncoder() 메서드로 쉽게 인스턴스 생성 가능

[참고]
Spring Security 공식 문서

<== prev