1. 참고 클래스

  1. 외부 데이터 매핑: GoogleResponseDto

  2. 내부 데이터 전달: OAuth2UserDto

  3. 인증 객체: CustomOAuth2User

  4. 인증 처리: CustomOAuth2UserService

  5. 인증 후 처리: CustomOAuthSuccessHandler

2. OAuth2 유저의 로그인 흐름

제공자로부터 데이터를 받아서 가공하는 순서를 정리해보자. 일단 우리의 코드는 Spring Security 필터의 여러군데를 지나친 후 loadUser() 여기서부터 시작된다.

OAuth2AuthorizationRequestRedirectFilter
    → OAuth2LoginAuthenticationFilter
    → ProviderManager
    → OAuth2LoginAuthenticationProvider
    → CustomOAuth2UserService.loadUser()  // 우리가 구현한 부분

loadUser 메서드 호출

CustomOAuth2UserService에서 일어난다.

CustomOAuth2UserService의 super클래스인 DefaultOAuth2UserService가 Google API 를 호출한다. 사용자 정보와 accessToken을 받아온다.

OAuth2User oAuth2User = super.loadUser(userRequest);  // Google API 호출
String accessToken = userRequest.getAccessToken().getTokenValue();

GoogleResponseDto 생성

Provider별 데이터를 파싱할 때 넘어오는 데이터 종류가 다르기 때문에 제공자별로 구분해준다.

Google에서 받은 원본 데이터를 우리 서비스에 맞게 파싱한다. 원본 데이터는 OAuth2User의 getAttributes() 메서드를 호출하면 반환된다. accessToken도 함께 저장한다.

oAuth2ResponseDto = new GoogleResponseDto(oAuth2User.getAttributes(), accessToken);