프로젝트에서 맡은 파트가 OAuth를 반영하여 다음 유튜브 영상 자료를 참고하여 학습하고 정리를 진행하려고 한다.
사용자가 가입된 서비스의 API에 접근하기 위해서는 사용자로부터 권한을 위임받아야 한다. 이 때 사용자의 패스워드 없이도 권한을 위임 받을 수 있는 방법이 필요하다. 이를 위해서 고안된 기술이 바로 OAuth이다.
현재 많은 API들이 OAuth를 통해서 상호 연동을 지원하고 있다.
OAuth를 이용해서 다른 서비스에 접근할 수 있는 권한을 획득할 수 있다. 반대로 다른 서비스에게 권한을 부여할 수도 있다.
더 자세히 알아보기 전에, OAuth는 4가지 역할을 나뉘어서 정의하고 있는데, 아래에서 기반을 다져놓자.
OAuth는 4가지 역할을 정의하고 있다.
1) 자원 소유자(Resource Owner)
2) 리소스 서버(Resource Server)
3) 고객(Client)
4) 인증 서버(Authorization Server)
1) 추상 프로토콜 흐름
# RFC 6749 문서
| |--(A)- 승인 요청 ->| 자원 | : 클라이언트의 리소스 엑세스 승인 요청을 나타냄
| | | 소유자 |
| |<-(B)-- 권한 부여 ---| | : 리소스 소유자가 승인을 부여하는 승인 단계를 나타냄
| | +---------------+
| |
| | +---------------+ | |--(C)-- 승인 부여 -->| 승인 | : 인증 서버로부터 승인을 받은 클라이언트를 나타냄
| 클라이언트 | | 서버 |
| |<-(D)----- 액세스 토큰 -------| | : 인증 서버로부터 액세스 토큰을 받는 클라이언트를 나타냄
| | +---------------+
| |
| | +---------------+
| |--(E)----- 액세스 토큰 ------>| 자원 | : 수신된 엑세스 토큰을 사용하여 리소스에 엑세스하는 클라이언트를 나타냄
| | | 서버 |
| |<-(F)--- 보호된 리소스 ---| | : 엑세스 중인 리소스를 나타냄
+---------+ +---------------+
+---------+ +---------------+
2) 흐름 설명
(A): 클라이언트는 리소스 소유자에게 승인을 요청함
=> 승인 요청은 리소스 소유자에게 직접 이루어질 수 있음, 또는 바람직하게 승인을 통해 간접적으로 서버를 중개자로 사용함
(B): 클라이언트는 권한 부여를 받음
=> 리소스 소유자의 인증을 나타내는 자격 증명임 / 권한 부여 유형은 사용자가 사용하는 방법에 따라 다르기 때문에 위에 역할에서 정의된 4가지 부여 유형 중 하나를 사용하여 표현됨
(C): 클라이언트는 인증을 통해 엑세스 토큰을 요청함
=> 인증 서버 및 인증 부여를 제시함
(D): 인증 서버는 클라이언트를 인증하고 유효성을 검사함
=> 승인을 부여하고 유효한 경우 엑세스 토큰을 발급함
(E): 클라어인트가 리소스로부터 보호되는 리소스를 요청함
=> 서버에 엑세스 토큰을 제시하여 인증함
(F): 리소스 서버는 엑세스 토큰의 유효성을 검사하고 유효한 경우 요청을 처리함