Igloo-Club / Igloo-Club-BE

1 stars 1 forks source link

[refactor] OAuth2.0 관련 리팩토링 제안 #79

Open tank3a opened 4 months ago

tank3a commented 4 months ago

⭐ OAuth2.0에 맞는 Flow 변경 및 인증(Authentication) 과정 Filter단 처리 제안

1. OAuth2.0 표준 스펙에 맞게 Flow 변경 제안

OAuth2.0 공식문서 Flow에서 확인할 수 있듯, Client(우리 서비스에선 Spring Boot API Server)가 Authorization Grant와 Access Token 발급의 주체입니다.

현재 파악한 바로는 아래와 같은 인증 Flow가 진행된다고 전달받았습니다.

  1. User가 카카오 로그인 클릭
  2. Kakao API호출 -> Authorization Grant(with code)
  3. 해당 코드를 가지고 Service Server로 API call(/api/auth/kakao)
  4. Access Token 발급 후 Response

카카오API 공식문서에서도 확인할 수 있듯, 모든 처리는 Service Server에서, 즉 Authorization Code는 End-User단에서 노출되면 안됩니다. 이는 OAuth2.0 스펙에 맞지 않기 때문입니다.

image

따라서 Redirect URL을 활용한 Authorization Code처리를 서버에서 구현하도록 변경하는 것을 제안합니다.


2. Spring Security OAuth2 Client 프레임워크 활용 제안

현재 아래와 같이 oauth2-client 프레임워크를 추가한 부분을 확인할 수 있었습니다. build.gradle

dependencies {
...
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
...

해당 프레임워크를 사용하면 OauthService, OauthController 등에서 직접 구현하신 부분을, 단순히 yaml파일에 필요한 정보만 추가하면 동작하도록 간단하게 설계할 수 있습니다.

또한 해당 방식은 AuthorizationFilter와 AuthenticationFilter를 통과시킨 후, Access Token을 반환해주기 때문에 Core Service로 들어가지 않고 Filter단에서 인증/인가 처리를 완료합니다. OAuth2 Client 공식문서 해당 문서에 자세한 설명이 있어서 참고하셔도 좋을 것 같습니다.

추가적으로 제가 아는 바로는 1번에서 Redirect URI를 통한 인가 후 인증 Flow도 이 프레임워크가 자동으로 해준다고 합니다.

따라서 Spring Security Client Framework 사용을 통한 코드 개선을 제안합니다.

✅ To Dos

tank3a commented 4 months ago

리뷰어로써 피드백일 뿐, 반영 여부는 해당 부분 개발하신 개발자분이 결정하시면 됩니다!