피드로 돌아가기
Dev.toSecurity
원문 읽기
Stateless 인증 구현을 위한 JWT의 구조적 특성과 보안 취약점 분석
JWT Is Not Encrypted (And That's By Design)
AI 요약
Context
세션 기반 인증의 Database Lookup 및 Redis Cache 의존성으로 인한 서버 부하와 확장성 저하 문제 발생. 서버가 상태를 저장하지 않는 Stateless 구조를 통해 인증 오버헤드를 제거하려는 요구사항 대두.
Technical Solution
- Header, Payload, Signature의 3단 구조를 통한 데이터 전송 및 무결성 검증 체계 설계
- Base64 Encoding 방식을 채택하여 Payload 내 User Identity 및 Permissions 정보를 공개적으로 포함하되, 서버만 보유한 Secret Key 기반의 HMAC Signing으로 위변조 방지
- 서버 측 저장소 조회 없이 Signature 재계산 및 비교만으로 인증을 완료하는 Stateless Authentication 로직 구현
- alg: none 공격 방지를 위해 토큰의 Header 설정이 아닌 서버 정의 알고리즘을 강제하는 검증 프로세스 적용
- Token Blocklist 및 Refresh Token 도입을 통한 Stateless 구조의 한계인 즉각적 권한 취소(Revocation) 문제 보완
실천 포인트
- Payload 내 비밀번호, 신용카드 번호 등 민감 정보 포함 여부 점검 - Signing Key의 엔트로피 확보를 위해 최소 256 bits 이상의 Randomness 적용 확인 - exp(Expiration Time) Claim 설정을 통한 토큰 유효 기간 제한 및 Blast Radius 최소화 - 라이브러리 업데이트를 통한 alg: none 취약점 제거 및 서버 측 알고리즘 고정 설정 적용