CS
[CS] OAuth2.0 간단한 이해
j9972
2023. 3. 10. 23:42
728x90
OAuth 프로토콜
인스타 / 페북 같은 서비스를 운영하기 위해서는 리소스가 필요함
리소스 수집 및 가공은 힘듬 & 사용자도 불편함
구글 / 네이버 같은 대기업이 미리 만들어 놓은 리소스를 사용할 수 있도록 api 를 공개하는 경우가 있음
( 구글 / 네이버 = OAuth provide : authorization server + resource server )
이 리소스는 민감한 정보일 수 있음
그래서 안전하게 HTTP 상으로 주고 받을 수 있도록 규악을 정했는데, 이를 'OAuth 프로토콜' 이라고 함
OAuth 구성요소
이거 그림만 이해해도 구성요소가 눈에 들어온다
resource owner = end-user = 즉, 나
client = App = 인스타 / 페북
resource server + authorization server = OAuth Provider = 네이버 / 구글
- authorization serve : resource owner 을 성공적으로 확인하고 client에(인스타)에게 accessToken을 줌
- resource server : naver 서버 처럼 우리의 개인 정보를 저장하고 있는 서버 -> accessToken 이용해 리소스 요청 받고 응답함
참고로, 개념상 resource server, authorization server 은 분리되어 있는데, 관념상으로 한 기업에서 담당하는 경우가 많아서 OAuth Provider 라고 불린다
OAuth 프로토콜의 흐름
위에서 언급한 구성요소 생각하면 이해하기 쉬움.
A. 인스타( client )가 나( resource owner )한테 개인정보 요청 ( 직접 요청 or authorization server 을 통해 간접 요청 )
- authorization server 을 통해 간접 요청 : 네이버 소셜 로그인시, 네이버에서 제공하는 로그인 창을 볼 수 있음
B. 인스타가 요청한 개인정보에 대해 허가가 응답됨 ( = authorization grant )
C. 인스타는 authorization grant 을 바탕으로 네이버 같은 서버 ( authorization server ) 에 access token 요청
- 인스타가 정당한 OAuth 이용자인지 인증하는 과정 포함 ( client id, client sceret 등으로 검사 )
D. 네이버 같은 서버 ( authorization server ) 은 인스타( client )의 인증 수행, authorization grant 가 유효한지 체크, 유효하면 accessToken 지급
E. 인스타( client )는 accessToken 제시해서 resource server에 리소스 요청
F. accessToken 유효하면 리소스 응답
Access & Refresh
1. 4가지 방법 중 하나의 authorization grant 방법으로 access token 을 요청한다.
2. client 인증 + authorization grant 유효성 검사 => access 토큰과 refresh 토큰 발행
3. access token으로 protected resource 요청
4. access token이 유효하면, 해당 리소스
5. 제공토큰이 만료될 때까지 (C)와 (D)를 반복한다. 이후에 만료된 access token으로 protected resource 요청
6. 만료된 토큰이라고 응답
7. refresh token으로 새로운 access token 발급해달라고 요청한다. 이 때 client에 대한 인증도 함께 이루어진다.
8. client 인증 + refresh token 유효성 검사 => access token 을 재발급(경우에 따라 refresh token 도 재발급 가능)
참고
https://letsmakemyselfprogrammer.tistory.com/103?category=1042409
[RFC 표준] OAuth 2.0를 쉽고 정확하게 알아보자! (기초 개념 및 용어 정리)
[OAuth 프로토콜이란?] 어떤 회사가 자신의 서비스를 운영하기 위해 어떤 리소스가 필요하다고 가정하자. 근데, 해당 리소스를 처음부터 수집하고 가공하는 일은 노력이 많이들기도 하고, 서비스
letsmakemyselfprogrammer.tistory.com