Social Login - 폼 인증 & 카카오 추가 및 리팩토링 - Converter

img_12.png

ProviderUserRequest

참고 - 레코드 특징arrow-up-right


ProviderUserConverter

T 타입 받아서 R 타입으로 변환 기능을 하는 인터페이스


DelegatingProviderUserConverter

  • 스프링 빈으로 등록한다. 생성 되면서 각 컨터버들의 구현체를 가지게 되며, 이 클래스의 역할은 각 구현체에게 위임하는 역할이다.

  • OAuth2UserServiceOidcUserService 에서 이 클래스를 주입 받고 각 서버에 맞는 ProviderUser를 반환 받는다.

  • Collections.unmodifiableList

    • 전달된 List를 수정 불가능 하도록 만드는 메서드. (읽기 전용 리스트 생성)


SocialType

각 컨버터별로 이 클래스를 이용해 소셜 타입을 확인한다.


OAuth2Utils

  • 구글, 네이버, 카카오 모두 응답의 JSON 형태가 다르다.

  • 1단계에서 바로 얻을 수 있는 정보들이면 mainAttribute, 2단계에서 얻을 수 있는 정보들은 subAttribute, 카카오 같은 경우 3단계까지 가야 얻을 수 있는 정보들이 있기 때문에 otherAttribute까지 확인해야 한다.


OAuth2GoogleProviderUserConverter

  • registrationId가 google일 때 실행된다.

img_13.png

구글은 1단계에서 정보를 바로 얻을 수 있기 때문에 mainAttribute를 생성한다.


OAuth2NaverProviderUserConverter

  • registrationId가 naver일 때 실행된다.

img_14.png

네이버는 response로 한 번 감싸져 있기 때문에 subAttribute를 생성한다.

참고(네이버 API 명세)

img_15.png


OAuth2KakaoProviderUserConverter & OAuth2KakaoOidcProviderUserConverter

  • registrationId가 kakao일 때 실행된다.

카카오의 경우 OpenID를 지원하며 선택적으로 사용할 수 있기 때문에 OAuth 인증과 Oidc 인증을 구분해야 한다. 그리고 이 둘은 응답 형태가 다르다.

OAuth 인증의 경우 기본 정보가 kakao_account로 묶여 있으며 profile 정보는 profile로 한 번 더 묶여 있는 것을 볼 수 있다.

img_16.png

참고(카카오 API 명세)

img_17.png

반면 OpenID 인증의 경우 구글처럼 1단계에서 바로 정보를 가져올 수 있는 것을 확인할 수 있다.

img_18.png

참고(카카오 API 명세)

img_19.png


UserDetailsProviderUserConverter

소셜 인증이 아닌 일반적인 폼 인증 방식일 때 사용되는 컨터버

Last updated