반응형
Spring Security를 이용해 회원 관리나 로그인 기능을 구현할 때, 비밀번호를 평문(plain text)으로 저장하면 보안상 매우 취약합니다. 이번 글에서는 Spring Security에서 제공하는 BCryptPasswordEncoder를 사용하여 안전하게 비밀번호를 암호화하는 방법을 소개하겠습니다.
1. BCryptPasswordEncoder란?
BCryptPasswordEncoder는 Spring Security에서 제공하는 비밀번호 암호화 도구로, 단방향 해싱(hashing)을 수행합니다. 한번 암호화된 비밀번호는 복호화가 불가능하며, 로그인 시에는 입력된 비밀번호를 다시 암호화하여 데이터베이스에 저장된 암호화된 비밀번호와 비교하여 인증합니다.
주요 특징:
- 단방향 암호화 방식
- 안전한 salt 자동 생성 및 관리
- 비밀번호 강도 조절 가능
2. BCryptPasswordEncoder 설정 방법
다음은 Spring 프로젝트에서 BCryptPasswordEncoder를 Bean으로 등록하는 예제입니다.
@Configuration
public class PasswordConfig {
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
위 코드에서 @Configuration 어노테이션은 Spring에게 이 클래스가 설정 클래스임을 알려줍니다. 그리고 @Bean어노테이션을 사용하여 BCryptPasswordEncoder 인스턴스를 Spring의 관리 대상(Bean)으로 등록합니다.
3. 회원가입에서 사용 방법
회원가입 시 사용자의 비밀번호를 암호화하여 저장하려면 아래와 같이 작성합니다.
@Autowired
private BCryptPasswordEncoder passwordEncoder;
public void registerUser(User user) {
String encodedPassword = passwordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
userRepository.save(user);
}
4. 로그인 시 비밀번호 검증 방법
로그인 시 비밀번호를 검증할 때는 사용자가 입력한 비밀번호와 데이터베이스에 저장된 암호화된 비밀번호를 비교합니다.
@Autowired
private BCryptPasswordEncoder passwordEncoder;
public boolean authenticate(String rawPassword, String encodedPassword) {
return passwordEncoder.matches(rawPassword, encodedPassword);
}
5. 주의사항
- 절대 비밀번호를 평문으로 저장하지 말기!
- strength 파라미터를 통해 암호화 강도를 조절할 수 있지만, 기본값(10)이 일반적인 환경에서 충분!
- 성능이 매우 중요한 환경이라면 암호화 강도를 적절히 설정할 것!
마무리
지금까지 Spring Security의 BCryptPasswordEncoder를 활용한 안전한 비밀번호 관리 방법을 알아봤습니다. 이를 통해 애플리케이션 보안을 강화하고 사용자 정보를 안전하게 보호할 수 있습니다.
반응형
'Spring Boot > 스프링부트 예제' 카테고리의 다른 글
답변형 게시판 구현 (3) (0) | 2023.10.27 |
---|---|
답변형 게시판 구현 (2) (1) | 2023.10.27 |
답변형 게시판 만들기 (1) (1) | 2023.10.26 |
QnA 다양한 검색 게시판 CRUD (1) (1) | 2023.10.24 |
게시판 페이징 처리 (1) | 2023.10.23 |