Search
Duplicate

[WEB] Access Token & Refresh Token 이해 with JWT

생성일
2022/11/15 07:19
태그
web
tech
JWT
AccessToken
RefreshToken
공개여부

Refresh Token이란?

Access Token 만을 통한 인증 방식의 문제는 만일 제 3자에게 탈취당할 경우 보안에 취약하다는 점이다.
Access Token은 발급된 이후, 서버에 저장되지 않고 토큰 자체로 검증을 하며, 사용자 권한을 인증하기 때문에, Access Token이 탈취되면 토큰이 만료되기 전 까지, 토큰을 휙득한 사람은 누구나 권한 접근이 가능해 지기 때문이다.
JWT 발급한 후 삭제가 불가능하기 때문에, 접근에 관여하는 토큰에 유효시간을 부여하는 식으로 대응한다.
유효기간은 짧으면서 사용자의 로그인 횟수를 줄이는 것이 가장 좋은 방법인데, 답은 Refresh Token이다.
Refresh 토큰도 JWT와 마찬가지로 JWT이며, 단지 Access Token은 접근에 관여하는 토큰이라면, Refresh 토큰은 재발급에 관여하는 토큰이므로 역할이 다르다.
예를 들어 처음 로그인 시, 서버는 로그인을 승인하면서, 클라이언트에게 Access Tocken과 Refresh Token을 동시에 발급한다.
서버는 DB에 Refresh Token을 저장하고, 클라이언트는 Access Token과 Refresh Token을 쿠키,세션 혹은 웹스토리지에 저장하고 요청이 있을때마다 이 둘을 헤더에 담아서 보낸다.
Refresh Token은 긴 유효기간을 가지며, Access Token이 만료됐을 때, 새로 재발급 해주는 열쇠가 된다.
따라서 만일 만료된 Access Token을 서버에 보내면, 서버는 같이 보내진 Refresh Token을 DB에 있는것과 비교해서 일치하면 다시 Access Token을 재발급하는 간단한 원리이다.
그리고 사용자가 로그아웃을 하면 저장소에서 Refresh Token을 삭제하여, 사용이 불가능하도록 하고 새로 로그인하면 서버에 다시 재발급해서 DB에 저장한다.
사용 예시
Refresh Token 유효기간 2주, Access Token의 유효기간은 1시간.
사용자는 API 요청을 하다가 1시간이 지나게 되면, 가지고 있는 Access Token은 만료 되게 된다.
그러면 Refresh Token의 유효기간 전까지는 Access Token을 새롭게 발급받을 수 있게된다.
즉, Refresh Token 접근에 대한 권한을 주는 것이 아니라 Access Token 재발급에만 관여하는 것이다.
만일 Refresh Token의 유효기간이 만료되었다면, 사용자는 다시 로그인해야한다.
Refresh Token 역시 탈취 가능성이 있기 때문에 적절한 유효기간 설정이 필요하다.

Access, Refresh 토큰 재발급 원리

1.
로그인 시 두개의 토큰 모두 발급한다.
Refresh Token만 서버측의 DB에 저장하며, Refresh Token과 Access Token을 쿠키 혹은 웹스토리지에 저장한다.
2.
사용자가 인증이 필요한 API에 접근하고자 하면 가장 먼저 토큰을 검사함.
토큰을 검사함과 동시에 각 경우에 대해서 토큰의 유효기간을 확인하여 재발급 여부를 결정한다.
case1 : 두개의 토큰 모두 만료 ⇒ 재 로그인 메시지 ⇒ 두개 모두 새로 발급
case2 : access 토큰은 만료, refresh 토큰 유효 ⇒ refresh 토큰을 검증하여 access 토큰 발급
case3 : access 토큰은 유효, refresh 토큰은 만료된 경우 ⇒ access token을 검증하여 refresh token 재발급
3.
로그아웃 시 두개의 토큰 모두 만료시킨다.

Refresh Token 인증 과정

1.
사용자: 사용자 로그인
2.
서버: DB를 통해 사용자 인증
3.
서버: 인증이 되면 Access token과 Refresh Token 발급
4.
서버: 발급한 토큰으로 응답
5.
사용자: Access token을 사용해 API 요청
6.
서버: Access Token 검증
7.
서버: 요청 데이터 응답
8.
Access Token 만료
9.
사용자: 만료된 Access Token을 사용해 API 요청
10.
서버 : Access Token 만료 확인
11.
서버 : Access Token 만료 신호
12.
사용자 : Access Token 발급 요청(Access Token,Refresh Token)
13.
서버 : Refresh Token 확인 후, 새로운 Access Token 발급 및 응답
Access Token 만료마다 이 과정을 반복할 필요는 없다. 사용자의 Access Token의 Payload를 통해 유효기간을 알 수 있으며 API 요청하여 만료 신호를 받기전에 미리 검증하여 재발급 요청을 서버로 보낼 수 있음.

같은 태그의 다른 글 보기

Search
WEB