2. 패스워드 설정
악의적인 공격
- 입력된 패스워드의 데이터는 데이터베이스에 평문으로 저장되면 안됩니다.
- 데이터베이스가 공격받아 아이디-패스워드가 노출될 수 있습니다.
- SQL Injection 등
- 패스워드 정보를 보호하기 위해 부호화를 통한 보안 방식이 권고되었습니다.
단방향 해싱
장점
- 보안성
- 해싱 값이 노출되더라도 원본을 알아내기 어렵습니다.
- 비선형 연산, 혼돈, 확산 등의 성질을 근거로 해시 함수의 복구 안전성이 확보됩니다.
- 적은 연산
- 입력받은 패스워드 값이 저장된 해싱값과 일치하는지 여부를 쉽게 얻을 수 있습니다.
단점
- 레인보우 테이블
- 단방향 해시값에 대응되는 다양한 원본값을 미리 계산해둔 테이블입니다.
- 이를 통해 해시값과 일치하는 원본 비밀번호를 빠르게 찾을 수 있습니다.
BCrypt
salt
- 입력 패스워드를 사용하여 만든 랜덤 바이트값입니다.
- salt값과 입력 패스워드를 사용하여 유일한 단방향 해시값을 만듭니다.
장점
- 이로 인해 레인보우 테이블은 유효성을 잃게 됩니다.
- 복호화 되어도 모든 패스워드가 털리지 않고 해당 패스워드만 털리므로 피해를 최소화할 수 있습니다.
강도 설정
- 보안의 저항성을 늘리기 위해 높은 강도로 설정됩니다.
- 기본적으로 강도 10으로 셋팅되어 있습니다.
- 강도가 높을수록 의도적으로 많은 연산을 수행합니다.
3. 프로필 입력
Gender code 매핑
ModelMapper
- Class to JSON 매핑을 담당하는 모듈입니다.
Gender 'code' 필드 매핑
- 클라이언트는 gender의 코드값으로 요청합니다.
- gender의 'code' field를 Gender Enum 상수로 매핑합니다.
- ModelMapper에 해당 매핑에 대한 설정을 추가하였습니다.
@Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setMatchingStrategy(MatchingStrategies.STRICT)
.setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE)
.setFieldMatchingEnabled(true);
modelMapper.typeMap(ProfileDto.class, User.class).addMappings(mapper -> {
mapper.map(ProfileDto::toGender, User::setGender);
});
return modelMapper;
}
4. 가입 완료
회원가입의 모든 과정이 마무리되면 다음과 같은 과정을 거칩니다.
AccessToken 발급
- 뒤에서 설명드리겠지만, 저희 프로젝트는 JWT 토큰 기반으로 인증 과정이 이루어집니다.
- 이를 위해 회원가입 후, access token을 발급합니다.
RefreshToken 발급
- RTT 기법 도입을 위해 발급됩니다.
ConfirmationToken 행 삭제
- ConfirmationToken의 인증 이메일 관련 행이 역할을 다하여 삭제됩니다.
- 일배치를 돌려 유효기간이 지난 토큰은 삭제됩니다.
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] 1-2. Spring Boot 사용하기 (1) | 2023.10.07 |
---|---|
[Spring Boot] 1-1. Spring Boot 사용하기 (0) | 2023.10.07 |
[Spring Boot][KoLiving] 3-1 Sign-up (0) | 2023.09.19 |
[Spring Boot][KoLiving] 2. i18n (0) | 2023.09.18 |
[Spring Boot][KoLiving] 1. Validation (0) | 2023.09.18 |