OAuth 사용하기(2. 승인)

Walker·2021년 5월 4일
0

OAuth

목록 보기
3/4
post-thumbnail

지난 등록 편에 이어서 승인 과정을 알아보자!

등록이 완료되면 ClientServer(Resource Server)는
Client IDClient Secret을 알고 있는 상태가 되고
Server는 Redirect URL로의 접속을 허가하게 된다.

이 상황에서 OwnerClient를 통해 Server의 일부 서비스
B,C 서비스(예를 들자면 구글 캘린더나 구글 메모)를 사용한다고 가정하자.

그렇다면 Client는 위 이미지에 있는 버튼(Login with Goole+)을 선택하게 되고
그 버튼의 Link 주소

https:// 서버 주소/클라이언트 아이디&사용할 서비스&리다이렉트 할 허가된 주소

와 같은 형식이 된다.

버튼의 Link로 이동하면서 만약 Owner가 Server에 로그인이 되지 않은 상태라면
로그인 창이 뜨고 로그인이 성공하면 그때서야

Server는 Link 주소의 클라이언트 아이디가 Server에 등록 되었는지와
리다이렉트 할 허가된 주소가 Server의 Redirect URL과 일치하는 지 확인하고.

이후에 이미지와 같이 Client에서 특정 서비스(scope)를 사용하는 것을
ALLOW 할지를 Owner에게 묻는다.

Owner가 ALLOW한다면 Server에는
허가한 Owner의 ID와 그 Owner가 허가한 서비스(scope) 목록저장된다.


이렇게 저장이 완료된 이후 Owner에게 Server
일종의 임시 비밀번호라고 할 수 있는 Authorization Code가 담긴 URL을 보낸다.
(응답할 때 Header 값으로 Location을 준다는 것은
받는 측의 웹브라우저에게 해당 URL로 이동하라는 명령을 하는 것)

Location 명령에 따라 Owner는 Authorization Code가 담긴 URL(Client)로 접근하여
Client에게 Authorization Code 정보를 전달한다.

이후 Client1. Client ID 2. Authorization Code 3. Redirect URL
그리고 드디어 4. Client Secret을 사용하여
Server에 접근하고 Server에서는 이 4가지 정보가 모두 일치하는지를 확인한다.

확인에 문제가 없다면 Client와 Server는 모두 임시 비밀번호였던
Authorization Code을 삭제한다.(Access Token으로 대체한다.)
여기서 궁금한 점이 생겼다.

Authorization Code를 지우는 과정에서 Client와 Server에서 모두 지워지는데
Server 4가지 정보를 확인하는 과정에서 문제가 있어 확인이 실패한다면
Client의 Authorization Code는 지워지는가?
(확인이 완료되면 다시 한번 Client측에 status 200과 같은 응답을 보내 그 이후에 지워지는건가?)

(질문 글은 올렸는데 나중에 응답이 있으면 수정)

4가지 정보 확인Authorization Code 삭제가 완료되면
드디어 길고 긴 과정 끝에 Server가 Client에게 Access Token을 전송하게 된다!
(소셜 로그인하면 왜 그렇게 오래 걸리는지 이해했다...)

Access Token은 Authorization Code에 비하여
Owner를 특정하고 그 Owner가 사용하는 서비스(scope) 정보를 포함하여
Authorization Code을 대체하는 장점이 있는 것 같다.
(인증되었다는 안정성의 장점과 확인해야 하는 정보의 수를 줄이는 효과일까?)

다음은 이렇게 얻은 Access Token으로 Server의 API를 사용해보자!

profile
I walk slowly, but I never walk backward. -Abraham Lincoln-

0개의 댓글