보안

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년