외부 소셜 계정을 기반으로 간편 인증하는 인증 서비스 제공
ex) facebook, kakao 등
Third-party 프로그램이 client를 대신해 리소스 서버에 제공하는 자원에 대한 접근 권한을 위임 받는 형식
1) Resource Owner
리소스 소유자. 외부 소셜 서비스 (API)
즉 해당 플랫폼에서 리소스를 소유하고 있는 사용자를 의미
2) Authorization Server
Authorization Server는 Resource Owner를 인증하고, 개발한 웹 서비스에게 Access Token 발급
외부 플랫폼 리소스에 접근할 수 있는지 인증하는 서버를 의미
3) Resource Server
구글, 페이스북, 카카오 같이 보호되는 리소스 서버
4) Client
Resource Owner를 대신해 Authorization Server & Resource Server에 접근 주체
우리가 개발하는 서비스를 Client라고 정의한 이유는 우리가 서비스를 Authorization Server & Resource Server 입장에서 클라이언트이기 때문이다.
웹 서비스를 Resouce Server에 등록
Redirect URI도 함께 등록해야 하는데, 해당 위치는 사용자가 OAuth 2.0 서비스에서 인증을 마치고 리다이렉션 시킬 위치
웹 서비스 등록을 성공적으로 마치면, Client ID 와 Client Secret 얻을 수 있다.
두 정보는 추후 Access Token을 획득하는데 중요한 역할을 함, 외부로 유출되어서는 안됨

카카오 OpenAPI 로그인

Resource Owner : 카카오 로그인 하기 버튼을 클릭해 로그인 요청
Client: OAuth 프로세스를 시작하기 위해 Resource Owner 브라우저를 Authorization Server
Client는 이때 Authorization URL에 response_type, client_id, redirect_uri, scope 매개변수를 쿼리 스트링으로 포함
Client로 부터 Authorization URL로 이동된 Resource Owner는 제공된 로그인 페이지에서 ID/PW을 입력하여 인증
Authorization server는 기존에 설정한 Redirect URL에 Authorization Code를 포함해 사용자 Redirection
Authorization Code란 리소스 접근을 위한 Access Token을 획득하기 위해 사용하는 임시 코드
단 임시코드는 수명이 매우 짧음
Client는 다시 Authorization Server에 Authorization Code를 전달하고, Access Token을 발급. Client는 자신이 발급 받은 Resource Owner의 Access Token을 DB에 저장.
Resource Server에서 Resource Owner읠 리소스에 접근 -> Access Token 사용
***) 단 Access Token 유출 X
로그인 요청시 Scope 정할 수 있음
scope란 client가 사용 가능한 resource 접근 범위 제한
이런 방식으로 발급된 Access Token은 Scope 정보를 갖고 있어 권한을 제한