OAuth 2 인증 프로토콜의 흐름을 이해하기 위해서는 OAuth 2 인증을 처리하는 컴포넌트에는 어떤 것이 있고, 각각의 컴포넌트들이 어떤 역할을 하는지 이해하는 것이 중요합니다.
Resource Owner
Resource Owner는 사용하고자 하는 Resource의 소유자를 말합니다.
💡 Bob이라는 사용자가 구글 계정으로 로그인해서 Google의 서비스(Resource)를 이용하고 있다면 Bob이 Google 서비스라는 Resource에 대한 Resource Owner가 됩니다.
⭐ Resource Owner는 한마디로 Google 등의 서비스를 이용하는 사용자입니다.
Client
Resource Owner를 대신해 보호된 Resource에 액세스하는 애플리케이션입니다.
Client는 서버, 데스크톱, 모바일 또는 기타 장치에서 실행되는 애플리케이션이 될 수 있습니다.
💡 Bob이라는 사용자가 A라는 애플리케이션을 통해서 Google의 소셜 로그인을 이용한다면 애플리케이션 A가 Client가 됩니다.
Client라는 용어가 조금 헷갈릴 수 있는데, ‘어떤 서비스를 이용하고자 하는 쪽은 Client이다’라고 생각하면 될 것 같습니다.
⭐ 항상 Client와 Server에 대한 기준을 잡기 위해서는 서비스를 제공하는 쪽을 기준으로 생각해야 합니다.
우리가 Spring MVC 섹션에서 만들어 보았던 커피 주문 샘플 애플리케이션이 외부의 API 서비스를 이용한다면 외부 API를 이용하는 측면에서는 커피 주문 샘플 애플리케이션이 Client인 것입니다.
Client와 Server의 관계가 여전히 헷갈린다면 SpringMVC Rest Client 챕터를 다시 확인하기 바랍니다.
Resource Server
OAuth 2 인증 처리 흐름 상에서의 Resource Server는 Client의 요청을 수락하고 Resource Owner에게 해당하는 Resource를 제공하는 서버입니다.
💡 A라는 애플리케이션(Client)이 Google Photo에서 Bob이라는 Resource Owner의 사진(Resource)을 가져오는 경우, Google Photo 서비스를 제공하는 애플리케이션이 Resource Server가 됩니다.
Authorization Server
OAuth 2 인증 처리 흐름에서 Authorization Server는 Client가 Resource Server에 접근할 수 있는 권한을 부여하는 서버입니다.
Resource Owner가 인증에 성공하면 Authorization Server는 Client에게 Access Token 형태로 Resource Owner의 Resource에 접근할 수 있는 권한을 부여합니다.
💡 Bob이라는 사용자(Resource Owner)가 구글 로그인 인증에 성공하면 A라는 애플리케이션(Client)이 Authorization Server로부터 Google Photo에 저장되어 있는 Bob의 사진(Resource)에 접근할 수 있는 권한(Access Token)을 부여받습니다.
그렇다면 이번에는 앞에서 살펴본 OAuth 2 인증 컴포넌트들이 어떤 식으로 상호 작용하면서 사용자의 인증을 처리하는지 그림으로 확인해 보도록 하겠습니다.
![[그림 4-32] OAuth 2 컴포넌트 간의 상호 작용을 통한 인증 처리 흐름](https://prod-files-secure.s3.us-west-2.amazonaws.com/fff60210-bf6a-4727-8555-4cbfcff28935/761d9673-9b0c-4d10-a640-3254665f3c62/nN_Y6RgU1iiUftpVNYyVo-1664238216432.png)
[그림 4-32] OAuth 2 컴포넌트 간의 상호 작용을 통한 인증 처리 흐름
[그림 4-32]는 OAuth 2를 구성하는 컴포넌트 간의 상호 작용을 통한 인증 처리 흐름입니다.
인증 처리를 위한 세부적인 단계가 조금 생략된 상태이긴 하지만 대략적인 OAuth 2의 인증 처리 흐름을 이해하기에는 충분합니다. [그림 4-32]에 대한 설명은 다음과 같습니다.