본문 바로가기
잡동사니

JWT

by 개발자 포비 2025. 1. 4.

JWT (JSON Web Token) 구조

JWT는 세 부분으로 구성되어 있으며, 각 부분은 점(.)으로 구분됩니다:

xxxxx.yyyyy.zzzzz

1. Header (헤더)

  • 토큰의 타입(typ)과 사용된 암호화 알고리즘(alg)을 정의
  • Base64Url로 인코딩됨

예시:

{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload (페이로드)

  • 전달하려는 데이터를 포함
  • Claims(클레임)이라고 불리는 정보의 조각들을 포함
  • Base64Url로 인코딩됨

예시:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516239022
}

주요 클레임 종류

  • Registered Claims: 미리 정의된 클레임 (iss, sub, exp, iat 등)
  • Public Claims: 사용자 정의 클레임
  • Private Claims: 당사자들 간에 정보를 공유하기 위한 사용자 정의 클레임

3. Signature (서명)

  • 인코딩된 헤더와 페이로드를 비밀키로 해시하여 생성
  • 토큰의 무결성을 검증하는데 사용
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

특징

  1. 각 부분은 Base64Url로 인코딩되어 URL에서 안전하게 전송 가능
  2. 서명을 통해 데이터 무결성 보장
  3. 자가 수용적(self-contained): 필요한 모든 정보를 토큰 자체에 포함
  4. Stateless: 서버에 별도의 세션 저장소가 필요 없음

주의사항

  1. 페이로드는 단순히 인코딩만 되어있어 누구나 디코딩 가능하므로 민감한 정보는 포함하지 않아야 함
  2. 토큰의 유효기간(exp)을 적절히 설정해야 함
  3. 비밀키는 안전하게 보관해야 함

'잡동사니' 카테고리의 다른 글

Docker Compose 파일 관련  (0) 2025.01.08
Swagger  (1) 2025.01.05
웹 - 스프링에서 카카오 로그인 연동하기  (0) 2024.12.12
웹 서버와 WAS  (3) 2024.12.05
깃허브 - 단축키 모음  (0) 2024.11.27

댓글