[OAuth 2.0] 개발 프로젝트

지금까지 OAuth 2.0 문서를 공부하였다 그러면 이제 이 문서를 통해 직접 인가 서버를 구현해보려고 한다.

 

기간 및 계획

  • 3/1일까지 진행 - 30일 동안 한다고 생각
  • Task에 대해 OAuth Server 만드는 것을 30단계로 나누어서 진행
  • 각 문서는 하루마다 나오는 것이라고 생각

 

이 개발의 목적

본 프로젝트의 목적은 OAuth2 표준(RFC 6749 및 관련 RFC)을 직접 구현함으로써 OAuth2 Authorization Server의 내부 동작 원리와 보안 요구사항을 이해하는 데 있다. 구현 과정에서는 Spring Security를 인증(로그인/세션) 보조 도구로만 활용하며, OAuth2 프로토콜 로직은 직접 설계 및 구현한다.

 

Spring Authorization Server는 본 프로젝트에서 라이브러리로 사용하지 않으며, 인가 코드 플로우의 요청 처리 구조와 책임 분리 방식을 학습하기 위한 구조적 클론 코딩 대상으로만 활용한다.

 

다음은 Spring Authorization Server code이다.

https://github.com/spring-projects/spring-authorization-server

 

GitHub - spring-projects/spring-authorization-server: Spring Authorization Server

Spring Authorization Server. Contribute to spring-projects/spring-authorization-server development by creating an account on GitHub.

github.com

 

 

1. 역할 정의

1.1 Spring Seucirty의 역할

Spring Security는 본 시스템에서 다음 역할만을 담당한다.

  • 사용자 로그인(Authentication)
  • 세션 관리(Session Management)
  • 현재 로그인 사용자 식별(Authentication Principal)

OAuth2 인가 및 토큰 발급 로직은 Spring Security의 책임 범위에 포함되지 않는다.

 

1.2 시스템 역할

본 시스템은 OAuth2 Authorization Server 역할을 수행한다.

  • 외부 클라이언트(Web/App)는 본 서버를 통해 Authorization Code를 발급받고 Access Token을 발급받는다.
  • 본 시스템은 Authorization Code Grant를 구현한다.
  • PKCE(RFC 7636)는 1차 구현 범위에서 제외하고, RFC 6749를 기준으로 기본 Authorization Code Flow를 구현한다.
    • PKCE는 이후 보안 강화를 위한 확장 단계에서 추가한다.

 

2. 클라이언트 유형

본 프로젝트에서는 Confidential Client(기밀 클라이언트) 만을 지원한다. Confidential Client는 client_secret을 안전하게 보관할 수 있는 서버 사이드 애플리케이션으로, Authorization Code 교환 과정에서 클라이언트 인증 수단으로 client_id와 client_secret을 사용할 수 있다.

 

본 프로젝트의 1차 구현에서는 PKCE(RFC 7636)를 적용하지 않기 때문에, client_secret을 안전하게 보호할 수 없는 Public Client(SPA, 모바일 앱 등)는 지원 대상에서 제외한다.

 

PKCE 없이 Public Client를 지원할 경우, Authorization Code 탈취 시 토큰 발급이 가능한 보안 취약점이 발생할 수 있다. 따라서 본 프로젝트에서는 보안 요구사항을 만족하기 위해 1차 구현 범위를 Confidential Client로 제한하며, PKCE 적용 이후(Phase 2)에 Public Client 지원을 확장할 예정이다.

 

 

일정 관리

  • 일정 관리는 Github Projects에서 진행

https://github.com/users/whitecy01/projects/2

 

@whitecy01's auth-server project • whitecy01

@whitecy01's auth-server project

github.com