[OAuth 2.0] 나는 왜 OAuth를 직접 구현해보려고 했는가?

이 시리즈는 OAuth를 사용하는 방법을 다루는 글이 아니라 RFC를 기반으로 Authorization Server가 어떤 책임을 가지는지 이해하고 이를 Spring 구현과 비교하며 재구성해보는 기록

 

OAuth 서버를 구현해보려고 한 계기

다음은 RFC 6749를 번역한 글 카테고리이다.

https://wo-dbs.tistory.com/category/RFC/OAuth 2.0

 

'RFC/OAuth 2.0' 카테고리의 글 목록

멋진 개발자가 되고 싶다!

wo-dbs.tistory.com

 

소설 로그인은 2번 정도 개발을 해보았지만 세부적으로 어떻게 작동되는지 잘 몰라 이번에 RFC 6749를 번역하면서 어떻게 동작하는지도 자세히 알게 되었다.

 

하지만 소셜 로그인이 진행되는 도중 인가 서버가 어떻게 처리를 하는지 좀 더 파보고 싶다는 생각을 하게 되었다. 그래서 RFC 원문을 보고 이해했던 걸 직접 만들어보면서 좀 더 이해해보고자 하는 생각이 들었다.

 

특히, Authorization code 부분의 인가 서버가 담당하는 역할을 좀 더 보고자 하였다.

 

OAuth 2.0 인가 서버를 구현하는 방법

인가 서버를 구현하는 방법을 어떻게 할 지 생각해보았는데 크게 2가지가 나왔다.

  1. 직접 모든 걸 구현
  2. 검증된 프레임워크, 기반 구현

완전 직접 구현은 스펙을 깊게 이해할 수 있다는 장점이 있지만 보안적인 부분, 로그인 처리 등등 하나씩 하기에는 정말 오랜 시간이 걸린다는 단점이 있었다. 예를 들어 인가 서버가 동작하기 위해서는 리소스 소유자와 클라이언트가 필요한데 인가 요청을 하는 로직까지 필요하다.

 

반면, 프레임워크 기반 구현은 이런 것들이 크게 자동화가 되어있다. 즉 나의 목적은 인가 서버의 동작을 보고 싶은 것이지 다른 등장 인물에 대해서까지 모든 부분을 구현하고 싶다라는 생각은 없었다. 그래서 이걸 다 자동으로 할 수 있는 것을 고르는 게 시간도 관리를 잘할 수 있다고 생각을 하고 간편하게 인가 서버의 흐름을 알 수 있을 것 같다는 생각을 하였다.

 

나의 현재 시점에서 본다면 나는 Spring을 공부하고 있는 상황이다. 그래서 Spring에서 이 인가 서버를 자동으로 구축해주는 것을 찾아보았는데 Spring Security 생태계 안에 OAuth Client, Resource Server, Authorization Server 모듈이 존재했다.

 

이 모듈들 중 인가 서버를 구축해주는 Authorization Server 코드(인가 서버)가 다음과 같이 있었다.

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

 

그래서 나는 Spring Authorization Server를 단순하게 복사 붙여넣기 하는 것 보다 RFC 6749와 비교하며 클론 코딩 형태로 재구성해보기로 하였다.

 

이 시리즈에서 이 Authorization Server를 클론 코딩하면서의 과정을 한 번 기록해보려고 한다.