OAuth가 정의하는 4가지 Roles
Resource Owner
Protected Resource로 접근할 수 있는 entity를 말한다.
즉 보호된 자원 또는 데이터에 대한 소유자 혹은 사용자를 의미한다.
현재 프로그램을 개발중이고, OAuth를 해당 프로그램에 적용하는 중이라면, Resource Owner는 프로그램을 사용하는 유저라고 생각하면된다.
Resource Server
Server는 protected resource 를 호스팅하며 protected resource로의 접근을 돕는 역할을 한다.
트위터 서버가 사용자의 트윗과 프로필 정보와 같은 자원을 호스팅하는 것을 그 예시로 들 수 있다.
Client
protected resource request를 생성하며, 사용자 혹은 자원 소유자의 대리로 자원에 액세스하는 역할을 한다.
현재 프로젝트를 진행하고 있고, OAuth를 적용하는 중이라면, Client는 지금 내가 개발하고 있는 프로그램이라고 생각하면 된다.
Authorization Server
Resource owner를 성공적으로 authenticating한 이후 Client에게 access token을 발급해준다.
공식 문서에서는 Resource Server와 분리되어 있는데, 같은 서버에서 동작하는 경우도 많다.
쉬운 이해를 위해 둘이 같은 서버라고 생각하고 접근하는 것도 좋은 방법이다.
인증 과정
OAuth를 사용하여 인증을 진행하는 경우 Resource Owner, Client, 그리고 Authorization Server(Resource Server) 세 개체 간의 communication이 이루어진다.
Authorization Server를 사용해 인증을 진행하려면 우선 Client에서 Authorization Server에 사전에 승인을 받아놓아야 하는데 이를 Register 라고 한다. 즉, 인증 서버에게 내 프로그램이 너의 OAuth 기능을 사용할 것이라고 미리 알려주는 것이다.
OAuth를 사용하여 로그인을 수행할 대상(ex. 구글, 깃허브 등)으로 register를 수행하여 Client ID, Client Secret을 획득하고 Redirection URI를 등록해준다. 이는 `Client - Authorization Server` 사이에서 이루어진다.
이 때 Redireciton URI는 로그인 완료 후 얻은 code를 return할 URI를 입력한다.
code는 사용자가 인증이 완료되었음을 확인하기 위한 값으로, 일종의 임시 비밀번호의 역할을 한다.
Resource Owner는 이 code를 사용해서 Client에 요청을 하고, Client는 이 code를 사용해 Resource server에서 access 토큰을 발급한다.
access token이 발급되었다는 것은 성공적으로 로그인이 되었다는 것을 의미하며, 이를 사용하여 Resource Server의 자원에 접근할 수 있게 된다.
공식 문서의 프로토콜 flow는 아래와 같다.
'개인학습' 카테고리의 다른 글
MVC 패턴 (1) | 2023.09.14 |
---|---|
Linear-time Temporal Logic guided Greybox Fuzzing 정리 (0) | 2023.09.05 |
(TIL) Model Checking (0) | 2023.08.22 |