반응형
JWT 기본 구조
JWT는 점(.)으로 구분된 3개 부분으로 이루어져 있다.
xxxxx.yyyyy.zzzzz
각 부분은 Base64URL로 인코딩되어 있다.
1. Header (헤더)
역할: 토큰의 타입과 서명 알고리즘 정보
{
"alg": "HS256",
"typ": "JWT"
}
- alg: 서명에 사용된 알고리즘 (HS256, RS256, ES256 등)
- typ: 토큰 타입 (항상 "JWT")
2. Payload (페이로드)
역할: 실제 전달하고자 하는 정보(클레임 Claims)
{
"sub": "user123",
"name": "김철수",
"role": "admin",
"iat": 1516239022,
"exp": 1516242622
}
클레임 종류
- Registered Claims: 표준 클레임 (sub, exp, iat, iss 등)
- Public Claims: 공개적으로 정의된 클레임
- Private Claims: 사용자 정의 클레임 (role, permissions 등)
3. Signature (서명)
역할: 토큰의 무결성 검증
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
서명은 헤더와 페이로드를 합친 후 비밀키로 암호화한 값입니다.
실제 JWT 예시
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
.으로 구분되어 있는거 분해하면 아래로 나누어짐.
- Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- Payload: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
- Signature: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT의 특징
- Stateless: 서버에 세션 정보를 저장하지 않음
- Self-contained: 토큰 자체에 모든 필요한 정보가 포함
- URL-safe: URL, HTTP 헤더에서 안전하게 사용 가능
- 투명성: Base64로 인코딩되어 있어 내용을 쉽게 확인 가능
보안 고려사항
- 페이로드는 암호화되지 않음 → 민감한 정보 저장 금지
- 서명으로만 무결성 검증 → 변조는 방지하지만 내용은 노출됨
- 만료시간 설정 필수 → 토큰 탈취 시 피해 최소화
- HTTPS 사용 권장 → 토큰 전송 시 암호화
JWT.io
JWT.io는 JWT(JSON Web Token)를 위한 공식 웹사이트. Auth0에서 운영하는 무료 온라인 도구다.
JSON Web Tokens - jwt.io
JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Signature (JWS).
www.jwt.io
이 사이트에서 JWT Debugger랑 라이브러리와 JWT 표준 문서 등이 있다.
여기서 JWT를 넣으면 Decoder를 통해 분해하거나 Encoder를 통해 인코딩을 할 수 있다.
라이브러리도 어떤것들이 있는지 볼 수 있다.
반응형
'개발 아카이브 > 개발 관련 지식' 카테고리의 다른 글
Claude Code Usage Monitor for macOS - 메뉴바에서 클로드 토큰 사용량 실시간 모니터링 (3) | 2025.07.31 |
---|---|
iCalendar 기본 문법 (0) | 2025.02.01 |
REST (Representational State Transfer)란 무엇인가? (1) | 2023.07.31 |
[노션 API] 노션 API 연동으로 데이터베이스 사용하기 (3) | 2023.04.09 |
자바스크립트 엔진인 V8에 대해 알아보자 (1) | 2023.02.26 |