OAuth 2.0 - Access Token & Refresh Token

dongbin_Shin·2021년 9월 28일
1

OAuth 2.0

목록 보기
4/4
post-thumbnail

Access Token 발급

Client가 Resource Server로부터 Access Token을 받기 위해서 인증을 거친 후 client_id,, client_secret, redirect_uri, authorization_code의 정보를 포함한 요청을 보낸다.

이후 Resource Server는 인증을 마쳤기 때문에 authorization_code를 지운다.

이 단계까지 마치면 드디어 Resource Server는 Access Token을 발급해 Client에게 전달한다.

API 호출

발급받은 Access Token을 이용하여 Resource Server의 기능을 핸들링하려면 Resource Server에서 제공하는 방식대로 핸들링해야 한다. 이 방식을 API (Application prgramming Interface)라고 한다.

예시: 구글 캘린더 목록 api

구글 공식 문서에서는 access token을 쿼리 파라미터로 주는 방식과 http 헤더의 bearer값으로 넘겨주라고 소개하고 있다.

구글 api 공식 문서

두 방식 중에서 curl 명령어를 사용하여 http 헤더의 bearer 값으로 access token을 넘겨주는 방식이 표준화된 방식이기 때문에 더 선호된다고 한다.

Refresh token

Access token은 일주일, 한달과 같이 특정한 유효기간이 있다. 이 기간이 만료되면 더이상 이 토큰을 이용해 api를 호출할 수 없게 된다. 이때 refresh token을 이용해 access token을 갱신할 수 있다. 아래는 OAuth 2.0에서 access token과 refresh token이 동작하는 방식을 표현한 그림이다.

출처: OAuth 2.0 공식 레퍼런스
access token이 만료되기 전까지는 access token으로 통신을 하다가 만료되면 refresh token을 통해 access token을 새로 발급받는다. (이때 refresh token도 함께 갱신해 보내는 서버도 있다.)

구글의 경우를 예시로 보면 아래와 같다.

refresh token 등의 정보를 post 방식으로 보내면 서버는 아래와 같은 json 형태로 access token을 갱신해준다.
구글 api 공식 문서 - Refreshing an access token

마치며

OAuth와 같이 다른 서비스와의 연합을 통해 사용자를 식별하는 인증 체계를 federated identity라고 한다. 주요한 서비스들은 이런 방식을 쉽게 구현할 수 있는 방법을 제공한다.
한편 많은 API는 Restful하게 만들어지고 있으므로 Restful의 의미에 대해 공부하면 더 좋다.

profile
멋있는 백엔드 개발자

0개의 댓글