sliver__

Spring security - UserDetailsService, PasswordEncoder (6) 본문

Backend/Spring Security

Spring security - UserDetailsService, PasswordEncoder (6)

sliver__ 2025. 3. 2. 11:13
728x90

UserDetailsService

UserDetailsService는 User의 name, password에 관여하는 interface class이다.

UserDetailsService를 상속한 interface는 UserDetailsManager interface class이고 

다시 UserDetailsManager를 상속받아 구현한 class는 InMemoryUserDetailsManager, JdbcUserDetailsManager class이다.

 

 

구현부인 InMemoryUserDetailsManager class의 constructor parameter로 여러 UserDetails 정보들을 넘겨줄 수 있다.

UserDetails는 Spring security 적용으로 인해 login시 필요한 유저 정보를 담고 있는 값이다.

 


PasswordEncoder

PasswordEncoder는 UserDetails에 담긴 password 정보를 암호화하기 위해 사용되는 class이다.

유저 비밀번호를 DB에 plain text로 저장하는건 보안상 위험하다.

그러므로 어떠한 알고리즘에 의해 One-way로 변경된 값을 DB에 저장하여 사용해야 된다.

 

PasswordEncoder interface class를 return하는 Bean을 등록을 하는데 실제로 return 되는 값은

PasswordEncoderFactories의 createDelegatingPasswordEncoder() 함수의 return 값이다.

 

이 값을 살펴보면 PasswordEncoder interface class를 return 하는 것을 확인할 수 있다.

그리고 코드 내용을 살펴보면 bcrpyt encoder를 default로 설정하는 것도 알 수 있다.

 

이렇듯 PasswordEncoder를 어떤 알고리즘으로 사용할 지 설정해주면 유저가 입력한 비밀번호는 설정한 알고리즘으로 해싱되어 DB에 저장될 것이다.

 


정리하자면 

  1. 유저가 로그인 창에 이름, 패스워드를 친다.
  2. 전달받은 패스워드를 지정한 알고리즘으로 해싱한다.
  3. DB에 저장된 값과 비교한다.

의 로직으로 흘러갈 것이다.

728x90
Comments