보안
JWT
다른 이름: JSON Web Token
정의
JSON Web Token. Header(알고리즘), Payload(데이터), Signature(서명) 3부분 구조. Base64 인코딩. 서버 세션 불필요(Stateless), 서명으로 위변조 검증. Access Token(짧은 만료), Refresh Token(긴 만료) 조합. REST API 인증 표준
상세 설명
기술 스펙
- 구조: Header.Payload.Signature (점으로 구분)
- Header: {"alg": "HS256", "typ": "JWT"}
- Payload: {"sub": "user123", "exp": 1735689600}
- Signature: HMAC-SHA256(base64(header).base64(payload), secret)
- 알고리즘: HS256 (대칭키), RS256 (비대칭키 RSA)
- Claims: iss (발행자), sub (주체), exp (만료), iat (발행 시간)
- Access Token: 15분~1시간 만료
- Refresh Token: 1주~1달 만료, Access Token 재발급
실무 활용
- REST API 인증: Authorization: Bearer <token>
- SPA: LocalStorage에 저장 (XSS 취약)
- MSA: 서비스 간 인증 전파
- OAuth: Google, Facebook 로그인 토큰
장점
- Stateless: 서버 세션 불필요, 확장 용이
- 자가 포함: Payload에 사용자 정보 포함
- 크로스 도메인: CORS 문제 없음
- 모바일 친화: 쿠키 없이 사용 가능
단점 및 제약
- 토큰 탈취: XSS, 중간자 공격 위험
- 만료 전 무효화 불가: 블랙리스트 필요
- 크기 큼: 쿠키(4KB) 초과 시 헤더 부담
- Secret 노출: 서명 키 유출 시 전체 무효화
호환성
모든 HTTP 클라이언트. Node.js, Python, Java 라이브러리
표준 정보
표준화 기구: IETF RFC 7519
출시 연도: 2015년