JWT 보안 논란: 쿠키 세션이 더 나은 선택인가?
JWT는 브라우저 기반 사용자 세션에 부적합하며, 쿠키 세션이 더 안전하고 효율적이라는 주장이 제기됨
JWT의 짧은 수명 주기(Short Lifespan)와 취약한 보안 모델(Insecure Model)이 주요 문제점으로 지적됨
서비스 간 통신(Service-to-Service) 등 특정 용도에는 JWT가 유용하나, 보안 전문가들은 회의적이라는 의견이 다수임
PASETO와 같은 대안 기술이 소개되었으나, 생태계 지원 부족이 단점으로 언급됨
브라우저 세션 인증에서의 JWT 한계점
논의에서는 JWT가 브라우저 기반 사용자 세션(Browser-based User Sessions)에 부적합하다고 지적한다. JWT의 짧은 수명 주기(5분 이하 권장)와 상태 비저장(Stateless) 설계의 보안적 어려움 때문에, 실제로는 상태 저장(Stateful) 메커니즘이 필요하게 되어 JWT의 장점이 퇴색된다는 것이다. 또한, JWT 자체의 설계 결함 가능성과 보안 전문가들의 불신이 사용을 꺼리게 하는 요인으로 언급된다.
쿠키 세션 기반 인증의 장점과 구현
상대적으로 쿠키 세션은 웹 프레임워크에서 기본적으로 지원하며 설정이 간편하다는 점이 강조된다. `express-session`과 같은 미들웨어를 통해 쉽게 구현 가능하며, `httpOnly` 및 `SameSite` 속성을 활용한 CSRF 방어(CSRF Protection)가 용이하다. 비록 상태 저장(Stateful) 방식이지만, 보안 전문가들은 이를 더 신뢰하며, JWT의 복잡한 보안 관리보다 안정적이라고 평가한다.
JWT의 유효 사용 사례와 대안 기술
JWT가 서비스 간 통신(Service-to-Service Communication)이나 SSO(Single Sign-On) 전송과 같은 특정 시나리오에서는 유용하다는 의견도 존재한다. 하지만 이러한 경우에도 PASETO와 같은 더 안전한 대안 표준(Secure Alternative Standard)이 존재하며, JWT의 보안 취약점을 해결할 수 있다고 제안된다. PASETO는 JWT의 설계적 문제를 개선하여 더 강력한 보안성을 제공하지만, 아직 생태계 지원이 부족하다는 점이 언급된다.
토큰 무효화(Revocation) 및 상태 관리 논쟁
JWT의 주요 비판점 중 하나는 개별 토큰 무효화(Individual Token Revocation)의 어려움이다. 만료 전 토큰을 무효화하려면 별도의 상태 저장 인프라가 필요하며, 이는 JWT의 상태 비저장(Stateless) 이점을 상쇄시킨다. 반면, 일부에서는 짧은 만료 시간과 함께 무효화 목록(Revocation List)을 관리하는 것이 전체 유효 토큰 수 대비 작아 효율적이라는 반론도 제기된다. 하지만 이는 결국 상태 저장(Stateful) 시스템으로 귀결된다는 지적이다.
보안 전문가들의 회의적 시각과 실제 공격 사례 부재
많은 댓글에서 JWT가 보안 전문가들 사이에서 신뢰받지 못한다는 점을 지적한다. 그럼에도 불구하고 실제 대규모 공격 사례가 드물다는 점을 들어 JWT의 보안성에 의문을 제기하는 의견도 있다. 하지만 이는 잘못된 구현(Flawed Implementations)이 많기 때문이며, AWS STS AssumeRoleWithWebIdentity와 같은 시스템에서도 JWT가 사용되지만 이는 고도로 전문화된 구현이라는 반론도 존재한다.