(ex. 내 서비스)
: 자원 소유자의 보호된 자원에 접근하는 애플리케이션
(ex. 내 서비스 사용자)
: 자원 소유자. 보호된 자원에 접근하는 권한을 제공
(ex. 카카오)
: 요청을 수신하고 권한을 검증하여 결과(자원)을 응답
client -> resource server
client -> resource owner
ex) 버튼 클릭시 소셜 로그인
-> {client id, scope, redirect url} 포함 링크 연결
resource owner -> resource server
if) 로그인 상태면
resource owner의 client id, redirect url 일치하는지 확인
else)
로그인 하라고 돌려보냄 (resource server -> resource owner)
resource owner -> resource server
scope에 해당되는 권한을 client에게 부여할 것인지 확인
-> 성공 시 resource server가 해당 요청 정보 얻게 됨
resource server -> resource owner
authorization code 전송
resource owner -> client
authorization code를 포함한 링크로 리다이렉트
client -> resource server
redirect url, client id, client secret, authorization code 포함한 링크 공유
resource server가 authorization code 일치 여부 확인
-> 일치하면 다음 단계(access token 발급) 이동
resource server -> client
authorization code
삭제access token
발급 후 client에 전달+--------+ +---------------+
| |--(A)------- Authorization Grant --------->| |
| | | |
| |<-(B)----------- Access Token -------------| |
| | & Refresh Token | |
| | | |
| | +----------+ | |
| |--(C)---- Access Token ---->| | | |
| | | | | |
| |<-(D)- Protected Resource --| Resource | | Authorization |
| Client | | Server | | Server |
| |--(E)---- Access Token ---->| | | |
| | | | | |
| |<-(F)- Invalid Token Error -| | | |
| | +----------+ | |
| | | |
| |--(G)----------- Refresh Token ----------->| |
| | | |
| |<-(H)----------- Access Token -------------| |
+--------+ & Optional Refresh Token +---------------+
reference
https://opentutorials.org/module/3668
https://www.rfc-editor.org/rfc/rfc6749#section-1.5