사용자의 비밀번호를 DB에 평문으로 저장하는 것은 보안상 매우 위험하다.

DB가 유출되더라도 실제 비밀번호를 알 수 없도록 단방향 암호화 함수를 이용해 암호화 해야한다.

 

PasswordEncoder 빈 등록

@Configuration
public class SecurityConfig {

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
  • BCryptPasswordEncoder: 현재 가장 널리 사용되는 암호화 알고리즘. 암호화할 때마다 같은 비밀번호라도 매번 다른 결과값생성
  • Spring Security에서 기본적으로 BCryptPasswordEncoder를 권장한다.

 

domain 비밀번호 암호화

public void encodePassword(PasswordEncoder passwordEncoder) {
    this.password = passwordEncoder.encode(this.password);
}

Entity의 비밀번호를 암호화해주는 메소드를 도메인에 선언한다.

 

Entity는 단순히 데이터만 담는 바구니가 아니라, 데이터와 그 데이터를 처리하는 메소드를 함께 가지고 있는 객체이다.(캡슐화)

 

Service단에서 암호화 로직을 생성하고 암호화가 필요한 곳에서 사용해도 되지만, 

이는 도메인이 가지고 있는 평문 비밀번호를 외부 Service에서 get해서 암호화 후 다시 set 해줘야하는 번거로움이 있고,

Service에서 암호화가 누락되어 무결성에 위배될 수 있다.

+ Recent posts