그에 대한 답이 바로 Refresh Token!!
📍 이 때 Refresh Token만 서버측 DB에 저장하며, Refresh Token과 Access Token을 쿠키 혹은 웹스토리지에 저장
📝 case1 : access token과 refresh token 모두가 만료된 경우 → 에러 발생 (재 로그인하여 둘다 새로 발급)
📝 case2 : access token은 만료됐지만, refresh token은 유효한 경우 → refresh token을 검증하여 access token 재발급
📝 case3 : access token은 유효하지만, refresh token은 만료된 경우 → access token을 검증하여 refresh token 재발급
📝 case4 : access token과 refresh token 모두가 유효한 경우 → 정상 처리
사용자가 ID , PW를 통해 로그인.
서버에서는 회원 DB에서 값을 비교
로그인이 완료되면 Access Token, Refresh Token을 발급한다. 이때 회원DB에도 Refresh Token을 저장해둔다.
사용자는 Refresh Token은 안전한 저장소에 저장 후, Access Token을 헤더에 실어 요청을 보낸다.
Access Token을 검증하여 이에 맞는 데이터를 보낸다.
시간이 지나 Access Token이 만료됐다.
사용자는 이전과 동일하게 Access Token을 헤더에 실어 요청을 보낸다.
서버는 Access Token이 만료됨을 확인하고 권한없음을 신호로 보낸다.
Tip
Access Token 만료가 될 때마다 계속 과정 7, 8을 거칠 필요는 없다.
사용자(프론트엔드)에서 Access Token의 Payload를 통해 유효기간을 알 수 있다.
따라서 프론트엔드 단에서 API 요청 전에 토큰이 만료됐다면 곧바로 재발급 요청을 할 수도 있다.
사용자는 Refresh Token과 Access Token을 함께 서버로 보낸다.
서버는 받은 Access Token이 조작되지 않았는지 확인한후, Refresh Token과 사용자의 DB에 저장되어 있던 Refresh Token을 비교한다. Token이 동일하고 유효기간도 지나지 않았다면 새로운 Access Token을 발급해준다.
서버는 새로운 Access Token을 헤더에 실어 다시 API 요청 응답을 진행한다.
참고자료
https://inpa.tistory.com/entry/WEB-📚-Access-Token-Refresh-Token-원리-feat-JWT [Inpa Dev 👨💻:티스토리]