[DRF] JWT로 로그인 구현하기(2) - Access Token & Refresh Token

2022. 3. 23. 18:17

앞서 살펴본 JWT를 통한 인증방식을 만일 제 3자에게 탈취당할 경우 보안에 취약하다.

만일 token의 유효기간을 짧게 한다면 사용자의 로그인 시간이 짧아져서 불편하고, 

유효기간을 늘리자면 토큰을 탈취달할 때의 보안이 취약해진다.

그래서 나온 방법이 Access Token과 Refresh Token이다. 

 

처음 로그인을 완료하였을 때 Access Token과 Refresh Token이 동시에 발급된다.

이 토큰은 긴 유효기간을 가지면서 Access Token이 만료됐을 때 새로 발급해주는 열쇠가 된다.

 

1. 사용자가 로그인을 한다.

2. 서버에서 DB와 값을 비교하여 로그인을 완료한다.

3. Access Token과 Refresh Token을 발급한다. 이때 일반적으로 회원 DB에 Refresh Token을 저장해둔다.

4. Access Token을 브라우저에 보낸다.

5. 시간이 지나 Access Token이 만료됐다면 이전과 다르게 Access Token을 헤더에 실어 요청을 보낸다.

6. 서버는 Access Token이 만료됨을 확인하고 권한없음을 신호로 보낸다.

(프론트엔드에서 Access Token의 Payload를 통해 유효기간을 알 수 있기 때문에 토큰이 만료됐다면 바로 재발급 요청을 할 수 있다.)

7. 사용자는 Refresh Token과 Access Token을 함께 서버로 보낸다.

8. 서버는 Access Token과 Refresh Token을 확인하고 그것이 맞다면 새로운 Access Token을 발급한다.

9. 서버는 새로운 Access Token을 헤더에 실어 다시 API를 요청한다. 

 

이 방법은 기존 JWT만을 사용하였을 때보다 안전하지만, 구현하기 어렵다는 단점이 있다.

우리 프로젝트에서는 Access Token과 Refresh Token을 사용하여 인증을 진행하도록 하겠다. 

BELATED ARTICLES

more