본문 바로가기
스프링

Spring boot, kotlin 기반의 OAuth2 인증 서버 개요

by jaeyong 2021. 6. 24.

개요

Spring boot와 Kotlin 언어를 이용한 OAuth2 인증서버 구현에 관한 내용을 기록합니다.

Authorization Server Resource Server 구현 및 Resource Server의 모듈화(maven 모듈)를 통해
Resource Server를 따로 두지 않고 서비스 내에 포함시키는 방법까지 알아봅니다.

본 시리즈에서 구현하는 인증 서버는 구글 firebase의 social login을 이용하여 로그인한다고 가정하였습니다.

또한 Spring boot 2.5.0와 Kotlin 1.5.X, JDK 8을 기본 환경으로 사용합니다.

OAuth2

OAuth2는 인증 방법의 한 종류로 HTTP를 통해 특정 자원에 접근할 수 있는 방법을 제공합니다. 또한 써드파티 애플리케이션에 제한된 접근을 제공합니다.

본 시리즈는 구현이 우선이 되기 때문에 OAuth2에 대한 자세한 설명은 생략합니다.

자세한 설명은 해당 링크를 참조바랍니다.

Authorization Server와 Resource Server

Authorization Server

사용자가 누구인지를 인증하고 Authorization Token을 발급하는 서버입니다.

사용자는 해당 Token과 함께 Resource Server로 받고자 하는 데이터를 요청합니다.

Resource Server

사용자에게 전달받은 Token이 유효한지 확인하고 사용자에게 요청받은 자원(데이터)를 반환합니다.

두 서버간의 흐름


위의 사진은 클라이언트(사용자)와 Authorization Server, Resource Server 간의 흐름을 나타냅니다.

  1. 클라이언트는 Resource Owner(클라이언트의 사용자)에게 권한 요청
    • 예를 들어, 구글 로그인 버튼을 클릭하면 구글 아이디로 로그인하라고 창 혹은 팝업창이 뜨는 것을 권한 요청이라고 할 수 있음
  2. Resource Owner는 클라이언트에게 Authorization Grant를 전달
    • 예를 들어, 구글 로그인 후에 클라이언트로 uid와 idToken 값 등이 전달되는 것을 말함
  3. 클라이언트는 전달 받은 Authorization Grant로 Authorization Server로 인증을 요청
  4. Authorization Server는 인증을 완료하고 클라이언트에 Access Token(Refresh Token도 포함할 수 있음)을 전달
  5. 클라이언트는 Access Token과 함께 Resource Server로 원하는 데이터를 요청
  6. Resource Server는 받은 Access Token의 유효성을 검증하고 해당 Token이 유효하다면 요청 받은 데이터를 반환

다음 내용

위의 Authorization Server와 Resource Server의 흐름 처럼 해당 시리즈에서는 두 서버를 직접 구현하고 실제로 구글 로그인을 사용하여 사용자 인증을 해보도록 하겠습니다.

다음 내용은 구글 firebase를 설정하고 임시로 구글 로그인 페이지까지 만들어 보겠습니다.

참고

댓글