내일배움캠프 32일차 TIL : Spring - Access Token과 Refresh Token

김원기·2024년 6월 7일

TIL

목록 보기
36/42
post-thumbnail

내일배움캠프 32일차 TIL : Spring - Access Token과 Refresh Token

JWT토큰

JWT 토큰은 유저의 신원이나 권한을 결정하는 정보를 담고 있는 데이터 조각으로 JWT 토큰을 사용해서 클라이언트와 서버는 안전하게 통신한다.

JWT 토큰 인증방식은 비밀키(개인키 or 대칭키)로 암호화를 하기 때문에 이가 가능하다.

JWT토큰의 문제

JWT 토큰을 탈취한 사람은 마치 신뢰할만한 사람인 것처럼 인증을 통과할 수 있는 문제가 있다.

이러한 문제를 해결하기 위해서 토큰의 유효 기간을 설정해야 한다.

JWT토큰의 문제 해결법

해결법은 유효기간이 다른 JWT 토큰 2개(Acses Token과 Refresh Token)을 두는 것이다.

기본적인 개념

Access Token의 유효기간은 짧으며 Refresh Token의 유효기간은 길다.

통신 과정에서 짧은 기간의 Access Token이 탈취 당해도 Refresh Token을 이용하여 재발급 하기 때문에 피해를 줄일 수 있다.

구체적으로 프로세스를 살펴보기

  1. 로그인 인증에 성공한 클라이언트는 Refresh Token과 Access Token 두 개를 서버로부터 받는다.
  2. 클라이언트는 Refresh Token과 Access Token을 로컬에 저장해놓는다.
  3. 클라이언트는 헤더에 Access Token을 넣고 API 통신을 한다.
  4. 일정 기간이 지나 Access Token의 유효기간이 만료되었다.
    4.1. Access Token은 이제 유효하지 않으므로 권한이 없는 사용자가 된다.
    4.2. 클라이언트로부터 유효기간이 지난 Access Token을 받은 서버는 401 (Unauthorized) 에러 코드로 응답한다.
    4.3. 401를 통해 클라이언트는 invalid_token (유효기간이 만료되었음)을 알 수 있다.
  5. 헤더에 Access Token 대신 Refresh Token을 넣어 API를 재요청한다.
  6. Refresh Token으로 사용자의 권한을 확인한 서버는 응답쿼리 헤더에 새로운 Access Token을 넣어 응답한다.
  7. 만약 Refresh Token도 만료되었다면 서버는 동일하게 401 error code를 보내고, 클라이언트는 재로그인해야한다.

즉 토큰이 만료되면 기간이 긴 Refresh Token을 통해 api를 재요청 하고,
권한 확인 후 AccessToken을 새로 넣어준다는 것

끝!

참고

https://velog.io/@chuu1019/Access-Token과-Refresh-Token이란-무엇이고-왜-필요할까

profile
혼자 공부하는 블로그라 부족함이 많아요 https://www.notion.so/18067a27ac7e4f4790dde645fb3bf3d3?pvs=4

0개의 댓글