✔ 등록 (Register)
Resource Server에 새로운 Client를 등록합니다.
- Client ID : 애플리케이션 식별 ID (노출 가능)
 - Client Secret : 식별 비밀번호 (노출 X)
 - Authorized Redirect URLs : server로부터 데이터를 받을 주소
 
✔ Resource Owner의 승인
Server의 데이터를 Client에서 사용하는 것에 동의하는 사용자의 권한 승인이 필요합니다.
- 
Owner → Client : 특정 작업 요청
 - 
Client → Owner : Server요청을 위한 화면 전송
서버 요청 버튼의 링크 (ex Google/Naver Login 버튼)
https//resource.server?client-id=1&scope=B,C&redirect-uri=http//~- 
client_id: 요청을 보내는 클라이언트 ID - 
scope: server에 요청할 작업 목록(ex, username가져오기.. 등) - 
redirect_uri: 요청 완료 시 이동할 주소 (서버에 저장된 주소와 다르면 이동 x) 
 - 
 - 
Owner → Server : 버튼 클릭 시, 위 주소로 서버에 접속 요청
 - 
Server → Owner : 로그인 여부 확인 후, 로그인 창 전송
 - 
Owner → Server : 로그인
 - 
Server → Owner :
1).
client_id값이 있는지 확인2). 요청받은
redirect_uri값과 저장된redirect_uri값이 같은지 확인 (다르면 종료)3). 1,2 가 일치하면
scope에 해당되는 권한을 client가 사용하는 것에 대한 동의창 전송
 - 
Owner → Server : 권한에 동의하면 Server에
userId와scope에 해당하는 데이터가 저장됨(
userId에 해당하는 Owner는scope데이터에 대한 권한을 동의하였음을 뜻합니다) 
✔ Resource Server의 승인
Server에서 accessToken을 발급하기 전, Resource Owner가 요청한 Client 정보가 일치하는지 확인합니다.
- 
Server → Owner → Client : authorization code 전송
Client에 authorization code값이 저장됨 (
Location: https//client/~~?code=3 )
 - 
Client → Server : Server에 직접 접속하여 전송.
https//resource.server/token?grant-type=authorization-code&code=3&redirect-uri=http//client/callback&client-id=1&client-secret=2
- 
grant_type: 3자 인증 방식 (authorization_code) - 
code: authorization_code 값 - 
redirect_uri/client_id/client_secret: Client 정보 
 - 
 - 
Server : 요청 받은 authorization_code 에 해당하는 정보의
redirect_uriclient_id/client_secret값이 일치 하는 지 확인 
✔ Access Token 발급
- 
Server에서 Client의 요청이 승인되면 저장된 authorization_code를 삭제합니다.
 - 
Authentication Server에서 Access Token을 발급한 후 Client에 전달합니다.
→ Client는 발급받은 Access Token으로 Resource Server에 데이터 요청을 할 수 있습니다.
 
✔ API 호출 (데이터 가져오기)
Server로부터 API 데이터를 불러오는 방법은 2가지가 있습니다.
- Access Token을 쿼리 파라미터로 전달하는 방법
 
https//www.googleapis.com/calendar/v3/users/me/calendarList?access_token=<access_token>
- Authentication : Bearer HTTP header로 전달하는 방법 (preferred)
 
Authentication : Bearer <access_token>
curl -H "Authorization: Bearer <access_token>" https//www.googleapis.com/calendar/v3/users/me/calendarList
✔ Refresh Token 발급
- Access Token의 유효기간이 만료되면 Client는 Authentication Server로 Refresh Token 발급 요청을 합니다.
 - Server는 새로운 Access Token을 발급하여 Client에 전달합니다.
 
REFERENCE
Youtube 생활코딩 OAuth 2.0 https://youtu.be/hm2r6LtUbk8