인가 서버를 구현해보는 방법은 다음과 같이 2가지가 있다.
- 스프링 시큐리티 쪽에 Oauth 서버 이 코드를 보면서 구조를 똑같이 만들어보는 것
- 콘솔을 찍어가면서 뭐라도 DB라도 세팅하면서 계속해보는 게 좋다고 생각이 들면 인가 서버 만들려면 로그인 페이지를 만들어야함 즉, 회원이 있어야함, 그런 토큰을 발급하는 걸 만들어야하는데 회원 기능을 만들고 → 그 독립으로 인가 서버가 있을 텐데 그거를 구현을 하면 어떨까 싶기도 함
우선 이 2가지를 선택하기 전 Spring Security가 정확하게 무엇을 해주는지 파악이 필요하다. 분석이 끝난 후 내가 직접 개발을 어디서부터 어디까지 할 수 있을지 나올 것 같았다.
Spring Security
Spring Security란 무엇인가?
- Spring 기반 애플리케이션에서 인증(Authentication)과 인가(Authorization)를 처리하기 위한 보안 프레임워크
핵심 목적은 다음과 같다.
- 사용자가 누구인지 인증
- 인증된 사용자가 어떤 요청을 할 수 있는지 제어
- 웹 애플리케이션에서 반복되는 보안 문제를 기본값으로 안전하게 처리
중요한 점은 Spring Security가
- Oauth 2 자체를 구현한 프레임워크가 아니라 OAuth2를 포함한 여러 보안 시나리오에서 보안 인프라를 제공하는 프레임워크라는 점
OAuth2에서의 역할 분리
- OAuth2에는 항상 역할(Role)이 존재함. → Spring Security는 이 중 어떤 역할을 맡느냐에 따라 해주는 범위가 완전히 달라진다.
OAuth2 Client 관점에서의 Spring Security
- 카카오 로그인, 구글 로그인에서 사용하는 방식
Client는 외부 인가 서버에게 인가를 요청하는 주체임 이때 우리 서버는 OAuth2 Client 역할을 함.
이 역할에서 Spring Security가 해주는 것
- Spring Security의 OAuth2 Client 기능(OAuth2Login)을 사용하면 Spring Security는 사실상 OAuth2 Client SDK처럼 동작함.
이때 자동으로 처리하는 것이
- 인가 요청(/authorize) 리다이렉트
- 인가 코드 수신
- 인가 코드 → 액세스 토큰 교환
- 토큰으로 사용자 정보 조회
- 사용자 정보를 SecurityContext에 저장
즉, OAuth2 프로토콜 흐름 대부분을 Spring Security가 대신 수행함
그래서 개발자는
- client-id / client-secret
- redirect-uri
- scope
정도만 설정하면 된다.
Authorization Server 관점에서의 Spring Security
인가 서버에서의 역할
- 인가 코드 발급
- 액세스 토큰 발급
- 클라이언트 검증
- redirect_uri 검증
- 보안 정책 적용
을 책임짐.
이 역할에서 Spring Security
- 인가 서버를 구현한다고 하면 → OAuth2 인가/토큰 발급 규칙은 직접 구현해야함.
즉,
- /oauth2/authorize
- /oauth2/token
- authorization code 저장/만료/1회용 처리
- PKCE 검증
- OAuth2 에러 응답
→ 이걸 자동으로 해주진 않는다. == 별도 프로젝트인 Spring Authorization Server를 쓰지 않는 한
그렇다고 해서 아무것도 안 해주는 것은 아님 Spring Security는 이 관점에서 다음과 같은 역할만 진행하게 됨
- 사용자 로그인 처리
- 사용자 인증(Authentication)
- 세션 관리
- 현재 로그인한 사용자 식별
즉 → 리소스 오너를 인증하는 역할까지만 담당
Spring Authorization Server란?
Spring 팀이 공식적으로 제공하는 OAuth 2.0 / OpenID Connect 인가 서버 구현체이다. Spring Security 위에서 동작하며, OAuth2 Authorization Server가 수행해야 하는 핵심 기능을 표준에 맞게 이미 구현해 둔 프로젝트이다.
제공하는 주요 기능
Spring Authorization Server는 다음 기능을 기본 제공한다.
- OAuth2 Authorization Endpoint (/oauth2/authorize)
- OAuth2 Token Endpoint (/oauth2/token)
- Authorization Code Grant
- PKCE (RFC 7636)
- Client Authentication
- Access Token / Refresh Token 발급
- Token Revocation / Introspection
- OpenID Connect (선택)
Spring Authorization Server는 Spring Security의 확장 프로젝트이다.
- Spring Security → 사용자 인증(Authentication), 세션 관리, 접근 제어
- Spring Authorization Server → OAuth2 프로토콜(인가 코드, 토큰 발급 등)
결론
- RFC 개발 프로젝트에서는 대표님이 말씀하신 2가지 선택사항 중 다음을 고려해야한다.
- 스프링 시큐리티 쪽에 Oauth 서버 클론 코딩 → 클론 코딩을 하면서 하나씩 어떻게 돌아가는지 학습
- Spring Security의 인가 서버 입장을 통해 인가 서버를 직접 구현 → 로그인 처리 부분은 Spring Security한테 책임 전가(단, 공부는 진행)
- 대표님은 내가 좀 더 재미있는 걸 선택하라고 하셨다. 그래서 인가 서버를 직접 만들어 보는 형태가 재미 있을 것 같다는 생각이 든다. 그래서 이걸로 진행해보려고 한다. 단, Spring의 Spring AUthorization Server는 사용하지 않는다.
oauth2-authorization-server → 레포지토리 이름
auth-server → 프로젝트 이름
https://velog.io/@dh1010a/Spring-Spring-Security를-이용한-로그인-구현-스프링부트-3.X-버전-1
[Spring] Spring Security를 이용한 로그인 구현 (스프링부트 3.X 버전) [1] - 동작 원리 및 Config 설정
스프링 부트 3.0 이상 버전의 시큐리티 사용법 및 바뀐 Config 작성법을 다루고 있습니다.
velog.io
https://docs.spring.io/spring-security/reference/servlet/oauth2/login/index.html#oauth2login
OAuth 2.0 Login :: Spring Security
docs.spring.io
'RFC > OAuth 2.0' 카테고리의 다른 글
| [OAuth 2.0] Spring Authorization Server 코드 분석(OAuth2AuthorizationEndpointFilter 클래스) (0) | 2026.02.04 |
|---|---|
| [OAuth 2.0] 인가 엔드포인트 큰 흐름 (0) | 2026.02.04 |
| [OAuth 2.0] 개발 프로젝트 (0) | 2026.02.03 |
| [OAuth 2.0] 10. Security Considerations(보안 고려 사항) (0) | 2026.01.20 |
| [OAuth 2.0] 9. Native Applications (0) | 2026.01.13 |