Access Token과 Refresh Token

taeyoung moon·2020년 8월 4일
0

android

목록 보기
5/5

access token과 refresh token을 설명하기 전에 token이란 무엇인지 왜 사용하는지에 대해서 먼저 알아보자.

JWT(Json Web Token)

jwt는 header와 payload, signature 세 파트로 구성되어 있으며 각파트는 점으로 구분되어
1111111111.2222222222.3333333333
header(적색).payload(청색).signature(녹색)
의 형태로 표현됩니다.

그림1. JWT 예시

header에는 토큰의 타입과 암호화 알고리즘이 포함되어 있다.
타입은 jwt를 나타내고 있으며, 암호화 알고리즘은 SHA256, RSA와 같은 해시 알고리즘을 나타낸다.

payload

토큰에 담을 claim 정보를 담고 있습니다.
저의 생각대로 쉽게 말하면 정보를 포함한 key와 value의 형태인 json 데이터가 담겨있다고 생각하면 될거 같습니다.

signature

토큰을 사용하는 경우 외부에서 위조 변조할 수 없어야하므로 header와 payload의 claim 정보가 수정되었는지 검증하기 위한 부분입니다.
secret key를 설정할 수 있으며 외부에서 수정하지 못하도록 사용됩니다.

Access Token과 Refresh Token

기존에 토큰을 사용할 때에 보안에 문제점을 보안하기 위해 사용한 것이 refresh token입니다.
정보 데이터를 포함한 access token만 사용할 때는 여러 문제점이 있었습니다.
유효기간에 따라 보안성과 편의성이 달라진다는 것입니다.
로그인을 예로들면,
토큰의 유효기간이 길 경우 로그인을 자주 하지 않아도 되므로 편의성은 높으나 그만큼 노출되는 시간이 기므로 보안성은 떨어지게 됩니다.
반대로 토큰의 유효기간을 짧게 설정할 경우 노출되는 시간이 짧으므로 보안성은 높아지게 되나 그만큼 사용자의 편의성은 떨어지게 됩니다.

그래서 보안성과 편의성 이 두가지 토끼를 모두 잡을 방법이 없을까? 라는 답이 refresh token인 것입니다.

refresh token은 정보를 포함한 access token과 함께 발급을 받게 되며 access token보다 더 긴 유효기간을 가지게 됩니다.
즉, refresh token은 access token의 유효기간을 보다 짧은 시간으로 설정하여 유효기간이 만료되었을 때 access token을 재발급 받을 수 있는 열쇠 역할을 하게 됩니다.
access token이 만료가 되어도 다시 로그인하지 않고 refresh token의 유효기간이 남아있으면 그 refresh token을 통해 access token을 재발급 받을 수 있게 되는 것입니다.
정보를 포함한 access token의 유효기간을 짧게 설정해 보안성을 높이고 refresh token의 유무로만 재발급 받아 로그인을 처리할 수 있으니 편의성도 높일 수가 있게 되었습니다.

그럼 여기서 의문이 드실 수가 있습니다.

그럼 refresh token은 오래 노출되어 있는데 보안에 취약한 것이 아니냐!!

정보를 포함한 access token의 유효기간이 짧아지니 이 토큰이 노출되더라도 짧은 유효기간으로 정보를 위조하거나 취득하는데 시간이 줄어들게 되므로 당연히 보안성이 더 높다고 할 수 있습니다.
그럼 refresh token은 유효기간이 긴데 이 토큰이 노출되면 위험한 것이 아니냐라고 생각할 수 있는데 이 토큰은 노출되더라도 이는 쓸모가 없게 됩니다. 왜냐하면 access token의 정보를 얻기 위해서는 추가로 id와 secret가 필요하기 때문입니다.

refresh token을 사용했을 경우 access token만 사용했을 때보다 보안성이 뛰어납니다.

단점으로는 구현이 복잡하고 access token이 만료될 때마다 재발급과정에서 요청이 너무 잦습니다.

자세한 구현 코드와 상세 동작 이미지는 추후 업데이트 예정.

profile
끈질긴 개발자

0개의 댓글