홈 JWT 토큰 인증에 대한 고민 3
포스트
취소

JWT 토큰 인증에 대한 고민 3

리프레시 토큰의 저장 위치

리프레시 토큰을 서버에 저장하면, 강제 로그아웃이 가능해진다.
단, 토큰을 검사해서 로그아웃 여부를 검사해야하므로, 사실상 세션 방식과 거의 동일한 부하가 걸리며, jwt 토큰만의 고유한 장점이 사라진다.
이는 적절히 타협해서 재발급 시점에만 검사한다면, 즉각적인 로그아웃은 불가능해도, 서버에 부하를 줄일 수 있다.

그러므로, 사실상 리프레시 토큰을 서버에 저장한다면, 두번째 방법이라고 봐야하며, 나머지는 사실상 세션 방식이라고 봐도 될 것 같다.
그리고, 사실상 리프레시 토큰의 탈취를 걱정해서 서버에 저장하는 것이라면, 리프레시 토큰에 접근할 키값을 어차피 클라이언트에 저장해야하므로, 의미없다고 본다.
리프레시 토큰에 중요한 정보가 들어있다는 이유라면 이해 가능하겠지만, 그것이 아니라면, 키값의 탈취로 리프레시 토큰 접근이 가능하기 때문이다.

하지만, 액세스 토큰의 재발급 시점에서 리프레시 토큰에 접근할 키값을 새로 생성하고, 리프레시 토큰의 보관을 새롭게 바꾼다면, 보안상의 이점이 생길 수 있다.
만약, 재발급 시점에 리프레시 토큰으로 접근할 키값을 빼앗긴다고 해도, 이미 재발급 이후에는 새롭게 키값이 설정되기에 유효하지 않아진다.
물론, 응답 과정에서 새로운 키값을 가로챌 수 있다는 점에서 여전히 위험성은 있지만, 일정 시간 내에 여러번의 재발급 요청이 오면 임시 정지 조치를 하는 등의 대안책들이 생긴다.

즉, 리프레시 토큰 (또는 인덱스 값) 은 클라이언트에 저장해야 한다는 것으로, 로컬 스토리지나 쿠키 중에서 골라야한다는 것이다.

결론적으론 쿠키가 제일 합리적인 것 같다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.