Spring/OAuth 2.0

[Spring] OAuth 2.0 개념과 동작 방식

sowith 2025. 2. 25. 23:14

이전 프로젝트에서 Spring Security와 JWT를 활용한 로그인 기능을 구현하면서 백엔드 유저 관리에 흥미를 느꼈다. 그 당시 OAuth2을 통한 소셜 로그인도 꼭 한번 구현해보고 싶었는데, 이번에 직접 적용해보면서 이를 정리해보려고 한다.

 

오늘은 OAuth의 개념에 대해 말해보려고 한다.

 

 

1. OAuth의 개념

OAuth는 인증을 위한 개방형 표준 프로토콜로, 사용자가 비밀번호를 직접 제공하지 않고도 제3자 클라이언트(우리의 서비스)에 자신의 정보에 대한 접근 권한을 안전하게 위임할 수 있도록 한다. 이를 통해 많은 서비스는 외부 소셜 계정(구글, 페이스북, 카카오 등)을 활용한 간편 회원 가입 및 로그인 기능을 제공한다.

 

 

2. OAuth 2.0의 구성 요소

 

- Resource Owner

일반적인 사용자를 의미한다. OAuth 2.0에서 Resource Owner는 자신의 계정 일부에 대한 엑세스 권한을 우리의 서비스에 부여한다.

 

- Client

Resource Server의 자원을 이용하려는 서비스이다. 보통은 우리가 개발하는 서비스에 이에 해당된다.

 

- Authorization Server

리소스 소유자를 인증하고, Client에 권한을 부여하는 서버이다.

리소스 소유자(Resource Owner, 사용자)는 Authorization 서버에 ID/PW를 넘겨 Authorization Code를 발급받는다. Client는 이 서버에 Authorization Code를 넘겨주어 엑세스 토큰을 발급받는다.

 

- Resource Server

 리소스 소유자의 정보를 가진 웹 애플리케이션(구글, 카카오 등) 서버이다. Client는 엑세스 토큰을 이 서버로 넘겨 사용자 정보를 받을 수 있다.

 

 

3. OAuth 2.0 동작 방식

(해당 블로그 사진 참조)

 

1. 사용자가 Client에 로그인 요청을 한다. 그럼 Client는 Client ID, Redirect URI, Response Type = code를 전달해 Authorization Server에 로그인 요청을 한다. (이때 Scope은 클라이언트가 부여받은 리소스의 접근 권한을 의미한다.)

 

2. Authorization Server는 사용자에게 로그인 페이지를 제공하고, 리소스 소유자는 이 페이지를 통해 ID, PW를 입력한다.

 

3. ID, PW가 맞다면 Authorization Server는 전달받은 Redirect URI로 Auhthorization Code를 발급한다.

 

4. Client는 발급받은 Authorization Code와 Client ID, Client Secret을 전달해 Authorization Server에 Access Token을 요청한다.

 

5. 발급받은 Access Token을 통해 Resource Server의 해당 사용자 정보를 이용할 수 있다.