학습 전 알아야 할 주체
1. Resource Owner (유저)
2. Client (우리 서버)
3. Resource Server (데이터를 가진 서버)
등록 절차
우리의 서버 즉 client는 리소스 서버를 이용하기 위해서 미리 등록을 해둬야한다.
여기서 알아야 할 3가지 요소가 있다.
Client ID, Client Secret(외부 노출 위험), Authorized Redirect URIs (Authorized code을 받을 주소)
(Resource Server에 Authorized code를 입력하여 클라이언트는 Client ID와 Client Secret을 받는다.)
인증 과정
Resource Owner에게 client는 https://resource_server/?client_id=1&scope=B,C&redirect_uri=https://client/callback을 전달
Resource Owner는 Resource server로 접속, Resource server는 로그인이 안되어있다면 로그인을 하도록 한다.
그때서야 client ID와 redirect URL이 일치하는지 확인하고,. 같으면 scope에 관한 메시지 전달한다. (이것이 동의화면!)
Authorization code
Resource Server는 https://client/callback?code=3 를 통하여 Resource Owner로 전달하고, Resource Owner는 client에 전달한다.
client는 Resource Server에 접근한다. (https://resoucre_server/token?grant_type=authorization_code&code=3&redirect_uri=https://client/callback&client_id=1&client_server=2)
Resource Server는 이 정보들을 확인한다.
Access Token 발급
oauth의 목적은 Access Token을 발급하는 것이다. Resource Server는 위에서 정보들을 확인한 후 Client에게 Access Token을 발급하고, Client는 AccessToken을 내부적으로 저장한다.
API
Resource Server를 호출하기 위해 API가 필요하다. 이를 위해 Access Token이 필요하다.
이 때 헤더값으로 Authorization Bearer를 전달하는 방식을 많이 사용한다.
refresh Token
refresh token을 저장하고 있다가, Access Token 유효기간이 만료되면 Refresh token으로 Access Token을 발급받는다.
(refresh token도 갱신되는 곳이 있고, 아닌 곳도 있다.)
참고 )
생활코딩
'Backend Study > Server' 카테고리의 다른 글
쿠키, 세션, JWT (0) | 2022.08.23 |
---|---|
From 절 서브 쿼리 (=인라인뷰 서브 쿼리) (0) | 2022.08.01 |
카카오 로그인 스프링부트 구현하기 (소셜 로그인) (0) | 2022.07.31 |
쿼리문(Join, Group by, Union, Having, 변수) (0) | 2022.07.24 |
리눅스 사용시 root? (0) | 2021.08.03 |