SpringBoot how to invalidate JWT Token such as logout or reset all active tokens?
SpringBoot에서 로그아웃과 같은 JWT 토큰을 무효화 하거나 토큰 활성 상태를 재 설정하는 방법은 무엇이 있을까?
<aside> 💡 SpringBoot에 국한되지 않더라도 좋은 내용일 것 같다.
</aside>
JWT는 DB를 사용하지 않고도 상태나 유효성을 검증할 수 있다. 그리고 만료될 때까지 사용할 수 있고 세션과 다른 목적으로 설계되어 있기 때문에 강제로 제거하거나 무효화 할 수 없습니다.
그러나 비즈니스 요구 사항에 따라 다음과 같은 경우 즉시 토큰을 무효화 해야 합니다.
사용자가 로그아웃을 했지만 누군가 이 토큰을 복사하여 가지고 있는 경우 만료 기간동안 사용할 수 있습니다. 어떻게 할 수 있을까요?
Claim 객체에 클라이언트 IP 주소를 저장합니다. 토큰의 유효성을 검사할 때 이 IP가 동일한 소스인지 여부를 확인할 수 있습니다.
User Agent 정보를 Claim 객체에 저장하여 유효성을 검사할 때 사용할 수 있습니다.
IP와 User Agent 모두 저장하고 검증할 때 사용할 수 있습니다.
사용자가 로그아웃할 때 API를 호출하여 토큰을 Redis 또는 DB의 블랙리스트에 등록합니다. 따라서 유효성 검사 시에 항상 블랙리스트를 조회해야 합니다.
<aside> 💡 결국 DB를 항상 조회하여야 하는 것 아닌가, JWT를 쓰는 이유가 없어 지는 것 아닐까?
</aside>