0. 프로젝트 소개(Spring Security) 및 Security에 대하여
1. User Entity 생성(Spring Security)
2. User 회원가입 (Spring Secureity)
3.Jwt의 사용 이유 (Spring Security)
4. Authorization(인증)
- 4-0 Authorization(인증) - 프로세스 설명
- 4-1 Authentication(인증) - UserDetails, UserDetailsService 및 JwtService 생성
- 4-2 Authentication(인증) - UsernamePasswordAuthenticationfilter 생성
- 4-3 Authentication(인증) - CorsFilter(선택사항)
- 4-4 Authentication(인증) - SecurityConfig
5. Authorization(인가)
- 5-1 Authorization(인가) - Jwt 인가 관련 에러 처리
- 5-2 Authorization(인가) - Jwt 인가 서비스 로직 추가
- 5-3 Authorization(인가) - AuthorizationFilter 생성
- 5-4 Authorization(인가) - SecurityConfig에 인가 관련 method 추가
6. OAuth
- 6-0 OAuth에 대해서
- 6-1 OAuth 2.0 - 사전 설정
- 6-2 OAuth2.0 - DTO 설정
- 6-3 OAuth2.0 - OAuth2UserService
- 6-4 OAuth2.0 - OAuth2UserService
- 6-5 OAuth2.0 - 필터 생성 및 SecurityConfig 수정
OAuthAttributes
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class OAuthAttributes {
private String nameAttributeKey;
private OAuth2UserDto oAuth2UserDto;
public OAuthAttributes of(SocialType socialType, String nameAttributeKey, Map<String, Object> attributes) {
if (socialType == SocialType.KAKAO) {
return ofKakao(nameAttributeKey, attributes);
} else if (socialType == SocialType.GOOGLE) {
return ofGoogle(nameAttributeKey, attributes);
}
return null;
}
private OAuthAttributes ofKakao(String userNameAttributeName, Map<String, Object> attributes) {
return OAuthAttributes.builder()
.nameAttributeKey(userNameAttributeName)
.oAuth2UserInfo(new KakaoOAuth2UserDto(attributes))
.build();
}
private OAuthAttributes ofGoogle(String userNameAttributeName, Map<String, Object> attributes) {
return OAuthAttributes.builder()
.nameAttributeKey(userNameAttributeName)
.oAuth2UserInfo(new GoogleOAuth2UserDto(attributes))
.build();
}
public User toEntity(SocialType socialType, OAuth2UserDto oAuth2UserDto) {
return User.builder()
.socialType(socialType)
.socialId(oAuth2UserDto.getId())
.email(UUID.randomUUID() + "@socialUser.com")
.nickname(oAuth2UserDto.getNickname())
.profileUrl(oAuth2UserDto.getProfileUrl())
.userRole("ROLE_USER")
.build();
}
}
- nameAttributeKey - OAuth2 로그인 진행 시 키값
- oAuth2User - 유저의 정보(닉네임, email, 프로필 사진 등)
ResourceServer 구분
public OAuthAttributes of(SocialType socialType, String nameAttributeKey, Map<String, Object> attributes) {
if (socialType == SocialType.KAKAO) {
return ofKakao(nameAttributeKey, attributes);
} else if (socialType == SocialType.GOOGLE) {
return ofGoogle(nameAttributeKey, attributes);
}
return null;
}
private OAuthAttributes ofKakao(String userNameAttributeName, Map<String, Object> attributes) {
return OAuthAttributes.builder()
.nameAttributeKey(userNameAttributeName)
.oAuth2UserInfo(new KakaoOAuth2UserDto(attributes))
.build();
}
private OAuthAttributes ofGoogle(String userNameAttributeName, Map<String, Object> attributes) {
return OAuthAttributes.builder()
.nameAttributeKey(userNameAttributeName)
.oAuth2UserInfo(new GoogleOAuth2UserDto(attributes))
.build();
}
- SocialType을 비고하여 Resource Server를 구분하여 각자에 맞는 Dto를 만들어주기 위한 method이다
'SpringBoot Security' 카테고리의 다른 글
6-5 OAuth2.0 - 필터 생성 및 SecurityConfig 수정 (0) | 2023.08.27 |
---|---|
6-4 OAuth2.0 - OAuth2UserService (0) | 2023.08.27 |
6-2 OAuth2.0 - DTO 설정 (0) | 2023.08.24 |
6-1 OAuth 2.0 - 사전 설정 (0) | 2023.08.06 |
6-0 OAuth에 대해서 (0) | 2023.07.25 |