JWT는 서버가 인증 상태를 저장하지 않는 stateless 구조이기 때문에, 한 번 발급된 토큰이 유출되면 해당 유저의 권한으로 계속 요청이 가능하다는 단점이 있다.

✅ JWT 보안 강화 방법 (정리된 포인트)

방법 설명
1. 짧은 만료 시간 (access token) 탈취되더라도 짧은 시간 내 만료되도록 설정
2. Refresh Token 분리 사용 access token은 짧게, refresh token은 HttpOnly 쿠키에 저장
3. HttpOnly / Secure 쿠키 사용 JS 접근 차단(XSS 방지), HTTPS 전송으로 중간자 공격 방지
4. SameSite 쿠키 설정 CSRF 공격 방어
5. Token 블랙리스트 (서버에서 예외 처리) 탈취되었거나 로그아웃한 토큰을 서버에서 차단 (비용 있음)
6. 토큰 내부 정보 최소화 민감한 정보는 절대 넣지 않기 (예: 패스워드, 권한 전체 등)
7. 발급 시 IP/UA 바인딩 클라이언트 환경 기반 제약으로 탈취 후 재사용 어려움 (옵션)

→ JWT는 탈취 시 서버가 상태를 모른다는 단점이 있기 때문에, 보통은 access token을 짧게 쓰고, refresh token은 HttpOnly 쿠키에 저장해서 보완합니다. 필요에 따라 서버 측 블랙리스트나 IP 바인딩도 적용할 수 있습니다.