패스워드 암호화
사용자의 비밀번호를 그대로 저장한다면, 보안상 문제가 생길 수 있다.
따라서 패스워드 같은 정보는 암호화하여 저장해야 한다.
이러한 암호화에 두 가지 방법이 사용될 수 있다.
양방향 암호화: 암호화된 암호문을 복호화할 수 있는 암호화
단방향 암호화: 암호화된 암호문을 복호화 불가능한 암호화
복호화가 불가능한 방식으로 암호를 처리하는 것이 보안적으로 더 안전하다. 하지만 비밀번호 찾기는 불가능하고 재설정만 가능하다.
단방향 암호화는 주로 Hash 기법을 활용하는데, Spring Security에서 제공하는 Hashing 알고리즘 중 BCrypt 알고리즘을 이용해보자.
수동 빈 등록
Spring Security에서 비밀번호 암호화를 위해 PasswordEncoder 인터페이스를 제공한다. 그 구현체 중 하나로 BCryptPasswordEncoder가 있다.
BCrypt hashing 알고리즘을 적용하기 위해 빈에 등록해준다.
@EnableWebSecurity
@Configuration
public class SecurityConfig {
/**
* PasswordEncoder interface의 구현체가 BCryptPasswordEncoder임을 수동 빈 등록을 통해서 명시한다.
*/
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}PasswordEncoder
PasswordEncoder는 인터페이스이다.
모든 Spring Security의 비밀번호 Encoder는 PasswordEncoder 인터페이스를 구현한다.
encode(): 평문인 비밀번호를 암호화한다.matches(): 평문 비밀번호를 인코딩된 비밀번호와 비교한다.
사용
MemberService에 회원가입 로직이 있다고 가정해보자.
입력받은 비밀번호를 주입받은 passwordEncoder를 통해 암호화하여 저장한다.
이후 로그인할 때는 matches() 를 통해 비교하여 로그인한다.
Last updated