보안
JWT
다른 이름: JSON Web Token
정의
JSON Web Token. Header(알고리즘), Payload(데이터), Signature(서명) 3부분 구조. Base64url로 인코딩되어 있어 페이로드는 암호화가 아니라 누구나 읽을 수 있음. 서버 세션 불필요(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년