Build UpOauth2로 인증된 사용자가 우리 서비스를 지속적으로 이용할 수 있는 회원으로 식별하는 추가 과정이 필요하다. OAuth2 이전 기존 회원 식별 방법기존 인증 방법과 연동하기 위한 방법 -TODO추출OAuth2인증을 제공하는 서비스 마다 상이한 사용자 스펙
Build Up
Oauth2로 인증된 사용자가 우리 서비스를 지속적으로 이용할 수 있는 회원으로 식별하는 추가 과정이 필요하다.
SpringBoot에서의 OAuth2의 Code Grant방식은 (메모리)세션기반으로 회원을 식별하기 때문이다.
만약 다중서버 운영환경에서 OAuth2로 인증한 사용자는 다른 포트를 가진 서버로 요청이 전송되면 회원이 아니라고 응답하면서 우리서비스에서 인증된 사용자들이 사용할 수 있는 기능을 사용할 수없게 되면서 다시 재인증을 하게 되는 불편한 상황이 연출 되기 떄문이다.
OAuth2 이전 기존 회원 식별 방법
우리 서비스는 JWT 기반으로 회원임을 식별하고 있다.
그래서 외부로 부터 가입된 회원을 우리 서비스 회원임을 증명하기 위한 Token이 필요하다.
기존 인증 방법과 연동하기 위한 방법 -TODO추출
- 외부에서 가입된 인증정보를 기반으로 필요한 정보들을 추출하고 저장한다.
- 우리 서비스 회원임을 증명하기 위한 인증정보를 갖춘다 (access, refresh) [JWT]
프로젝트에서 인증된 회원인지 구분하기 위해서는 우리쪽 토큰 정보가 필요하다.
인증은 Spring OAuth2가 안전하게 제공하고 있으므로 인증완료 후 우리쪽 토큰 정보를 생성해주고 인증된 회원의 자격을 얻게되어 우리 서비스를 순회할 수 있을 것이다.
커스텀한 토큰 정보로 우리서비스에 인증된 사용자임을 증명하기만 하면된다.
이미 앞선 필터에서 처리된 인증된 사용자는 재검사하지 않기 때문이다.그래서 oauth2인증Filter에서는 통과된다.
OAuth2인증이 성공적으로만 이루어지면 우리쪽 토큰을 구워주면 되므로 다른 부분을 커스텀할 필요없다.

OAuth2인증을 제공하는 서비스 마다 상이한 사용자 스펙
각 인증업체 마다 사용자 스펙을 다르게 구성하여 응답해주고 있었다. (attribute 주목)
[카카오 응답 스펙]

[구글 응답 스펙]

해당 스펙이 상이하므로 코드 측면에서 IF문의 분기처리 및 확장에 유연하지 못한 점을 고려하여 팩토리 메소드 패턴을 적용했다.

공통적으로 외부에서 인증된 사용자 정보를 추출하기 위해 생성한 OAuthUser 상위 타입의 인터페이스

[각 외부 스펙에 따른 각 비즈니스 로직]

[서비스 호출 부분 := 클라이언트]
Stream으로 각 OAuth2 인증 유형에 맞는 Service를 런타임 시점에 선택후 스펙 정보를 추출하도록 구성
