외부 데이터 매핑: GoogleResponseDto
내부 데이터 전달: OAuth2UserDto
인증 객체: CustomOAuth2User
인증 처리: CustomOAuth2UserService
인증 후 처리: CustomOAuthSuccessHandler
제공자로부터 데이터를 받아서 가공하는 순서를 정리해보자. 일단 우리의 코드는 Spring Security 필터의 여러군데를 지나친 후 loadUser() 여기서부터 시작된다.
OAuth2AuthorizationRequestRedirectFilter
→ OAuth2LoginAuthenticationFilter
→ ProviderManager
→ OAuth2LoginAuthenticationProvider
→ CustomOAuth2UserService.loadUser() // 우리가 구현한 부분
CustomOAuth2UserService에서 일어난다.
CustomOAuth2UserService의 super클래스인 DefaultOAuth2UserService가 Google API 를 호출한다. 사용자 정보와 accessToken을 받아온다.
OAuth2User oAuth2User = super.loadUser(userRequest); // Google API 호출
String accessToken = userRequest.getAccessToken().getTokenValue();
Provider별 데이터를 파싱할 때 넘어오는 데이터 종류가 다르기 때문에 제공자별로 구분해준다.
Google에서 받은 원본 데이터를 우리 서비스에 맞게 파싱한다. 원본 데이터는 OAuth2User의 getAttributes() 메서드를 호출하면 반환된다. accessToken도 함께 저장한다.
oAuth2ResponseDto = new GoogleResponseDto(oAuth2User.getAttributes(), accessToken);