(CS/컴퓨터공학) JWT 완전 가이드 - 개념, 구조, 동작 원리

✨ 개요

JWT(JSON Web Token) 는 인증/인가 정보를 자체 포함(Self-contained) 하는 토큰입니다.
서버는 토큰의 서명(Signature) 만 검증해 신뢰할 수 있으며, DB 조회 없이도 사용자 식별·권한 확인이 가능합니다.


1. 한 장 요약


2 구조(Structure)

2.1 Header (메타데이터)

{ "alg": "RS256", "typ": "JWT", "kid": "key-id-2025-01" }
// alg: 서명 알고리즘(예: HS256, RS256, ES256)
// kid:  식별자(JWKS  회전  어떤 키로 서명했는지 표시)
// typ: 보통 "JWT"

2.2 Paylod

{
  "iss": "https://auth.example.com",  // 토큰 발급자
  "sub": "user_123",                  // 사용자 식별자
  "aud": "api.example.com",           // 토큰 대상(클라이언트/리소스)
  "exp": 1734300000,                  // 만료 시각(UTC epoch seconds)
  "iat": 1734296400,                  // 발급 시각
  "nbf": 1734296400,                  //  시간 전에는 유효하지 않음
  "scope": "read:orders write:orders",
  "role": "admin",
  "jti": "6c1a0e9e..."                // 토큰 고유 ID(블랙리스트/재사용 방지에 유용)
}

2.3 Signature

signature = Sign( base64url(header) + "." + base64url(payload), key, alg )

3 동작 원리(Flow)

  1. 로그인: 사용자가 ID/PW 또는 OAuth로 인증
  2. 발급: 인증 서버가 Access Token(JWT)(수명 짧게)와 Refresh Token(수명 길게)을 발급
  3. 요청: 클라이언트가 API 호출 시
    • Authorization: Bearer
  4. 검증: 리소스 서버는
    • 대칭키(HS256): 서버에 저장된 같은 비밀키로 서명 검증
    • 비대칭키(RS256/ES256): 공개키(JWKS URL로 배포)로 검증 → 수평 확장에 유리
  5. 인가: sub/role/scope 등으로 권한 판단
  6. 갱신: Access 만료 시 Refresh 로 새 Access 발급(토큰 회전/블랙리스트 전략과 함께)

4. 서명 알고리즘 선택

알고리즘 키 유형 장점 단점/주의 권장도
HS256 대칭(Secret) 간단/빠름 모든 검증자가 같은 비밀키 필요(유출시 전체 위험) 소규모/단일 서비스
RS256 비대칭(RSA) 공개키 배포로 수평 확장 용이 개인키 관리/성능 비용 ✅ 일반 권장
ES256 비대칭(ECDSA) 짧은 키/서명, 성능 우수 구현/호환성 점검 필요 ✅ 권장(현대 환경)

5. 저장소 선택(웹·모바일)


6. 만료·갱신·폐기(실무 핵심)


7. 보안 오해와 사실


8. 실무 체크리스트



Related Posts