사용자가 가입된 서비스의 API에 접근하기 위해서는 사용자로부터 권한을 위임 받아야 한다. 이 때 사용자의 패스워드 없이도 권한을 위임 받을 수 있는 방법이 필요하다. 이를 위해서 고안된 기술이 OAuth이다. 오늘날 많은 API들이 OAuth를 통해서 상호 연동을 지원하고 있다.
Resource Owner = 사용자
Resource Server = 리소스 제공자 (ex 구글, 네이버, 카카오)
Client = 서드 파티 서비스 (내 서비스)

Client ID
Client Secret
Authorized Redirect URI
Redirect URI
서드 파티 서비스 페이지에서 로그인을 요청하게 되면 Resource Server의 로그인 페이지로 이동한다. 사용자가 로그인에 성공하면 다시 서드 파티 페이지로 돌아가야 하는데 그 돌아갈 페이지의 주소가 Redirect URI 이다.

로그인 요청 URI 예시
https://accounts.google.com/o/oauth2/v2/auth
?response_type=code
&redirect_uri=http://~~~
&scope=https://www.googleapis.com/auth/plus.login
&client_id=
Resource Server는 사용자가 어떤 스코프를 허용했다는 정보를 알게된다.
Authorization Code 발급

Access Token 요청

Access Token 발급

Resource Server는 Client가 등록된 Client가 맞는지 확인하기 위해서 Resource Owner을 통해서 Client에게 Authorization code를 전달합니다. 이 값을 받은 Client는 이 값과 Client secret의 값을 Resource Server로 전송해서 Client의 신원을 Resource Owner에게 증명합니다.
GET /dirve/v2/files
Authorization: Bearer {ACCESS_TOKEN}
Host: www.googleapis.com/
POST /oauth2/v4/token
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=<your_client_id>
&client_secret=<your_client_secret>
&refresh_token=<refresh_token>
&grant_type=refresh_token