a.클라이언트
b.우리가 제공하는 어플리케이션(=서버)
c.구글, 네이버 등 클라이언트가 이용하는 곳의 서버(= resource server)
d.oauth 서버
1. register
a의 회원정보를 이용하기 위해선 b는 c의 승인을 미리 받아놔야 된다.
서비스 마다 다 다르지만 공통적으로 client id / client secret / Authorized redirect URIs 를 요구한다.
client id : b 를 식별하는 id
client secret : client id 의 비밀번호
Authorized redirect URIs : c가 권한을 부여할때, c가 Authorize code를 보내줄 url
2.인증
인증은 기능별로 받는다. 기능을 scope 라고 하자
a 가 b 에 요청할때 c 와 연동하여 실행 할 기능이 있을것이다.
버튼 같이 a가 요청할 때의 link를 아래와 같이 설정한다.
http://b.server/?client_id=id&scope=사용할 기능1,사용할 기능2,& redirect_uri=http://client/callback
a가 naver에 로그인 버튼을 클릭했을 때 naver 계정으로 로그인을 하면 c는 로그인의 여부를 판단을 하고
a가 c의 회원이라서 로그인에 성공을 하면 우리가 설정한 link를 확인하고
register 때 받은 client_id가 있는지, 요청하는 redirect_uri가 일치하는지 확인한다.
uri가 일치하지 않으면 그대로 연동 프로세스를 종료하고,
일치한다면 a에게 scope 에 대한 권한을 b에다가 부여할 것인가를 물어본다.
그럼 c에는 client_id / client_secret / Authorized redirect URLs 이외에
b에서의 user_id 와 a 의 scope를 등록한다.
또 c 는 임시 비밀번호를 사용한다. authorization code 라고 하는 것이다.
c는 a에게 authorization code를 아래와 같이 헤더를 통해 전송한다.
Location:https://client/callback?code=3
a의 웹 브라우저는 헤더를 확인하고 b에다 위의 주소로 이동을 한다.
그러면 b 는 authorization code 를 알게 된다.
b는 c에게 이런 주소로 요청을 한다.
https:resource.server/token?grant_type=authorization_code
&code=3
&redirect_uri=https://client/callback
&client_id=1
&client_secret=2
그럼 이제 또 c에서는 보내온 정보들이 자신이 가지고 있는 정보와 일치하는지 확인한다.
일치한다면 authorization_code를 b와 c에서 삭제하고 c는 b에게 access token을 발급한다.
3.Access token 발급 과 refresh token
c는 access token을 b에게 발급한다.
이 token은 이제 추후에 요청이 들어와도 access_token을 보고 그 token에 해당하는 정보 중
user id와 scope를 확인한다.
access token도 유효기간이 있다. 그럼 다시 받아야되는데 이때 재발급을 쉽게 해주기 위해 사용하는게
refresh token이다.
보통 access token 과 refresh token 을 같이 발급한다.
refresh token은 유효기간이 없다. 때문에 재발급시에는 refresh token을 확인하고
access token을 재발급 한다.
access token과 refresh token을 같이 재 발급 하는 경우도 있다.
'참고자료' 카테고리의 다른 글
aws 배포 관련 참고 사이트 (0) | 2021.06.08 |
---|---|
인코딩과 디코딩 (0) | 2021.06.01 |
aws 에 배포 (0) | 2021.03.29 |
google cloud platform (GCP)의 사용법 (0) | 2021.03.26 |
aws (0) | 2021.03.22 |