[JWT 토큰] JWT 토큰의 이해

민지·2025년 4월 6일

기술문서

목록 보기
1/8

이 글에서는 JWT의 개념부터 구조, 인증 방식, 그리고 AccessToken과 RefreshToken의 역할까지 전체 흐름을 정리해보겠다.


1. JWT(JSON Web Token)란?

JWT는 사용자 인증에 필요한 정보를 JSON 형태로 담고 있는 토큰이다.

이 토큰은 단순한 문자열이지만 내부에 사용자를 식별할 수 있는 정보가 들어 있으며, 이 정보는 Base64 URL-safe 인코딩으로 직렬화되어 있다.

✅ URL-safe 인코딩이란?

일반적인 Base64 인코딩에서 사용되는 '+', '/' 문자를 각각 '-', '_'로 바꿔 URL에서 안전하게 사용하도록 한 방식입니다.

✅ 특징

  • 토큰 자체에 사용자의 정보가 포함됨 → Self-contained
  • 서버가 사용자 상태를 따로 기억하지 않아도 됨 → Stateless 인증
  • 서버는 클라이언트의 요청을 받았을 때, JWT 토큰만으로 인증 여부를 판단 가능


2. JWT의 구조

JWT는 총 세 부분으로 구성된다. 각 부분은 .으로 구분되며 다음과 같다.

Header.Payload.Signature

1️⃣ Header

  • 토큰 타입 (typ)과 사용된 서명 알고리즘 (alg) 정보를 포함한다
{
  "alg": "HS512",
  "typ": "JWT"
}

2️⃣ Payload

  • 사용자의 정보 또는 Claim(주장)을 담는 부분
  • 보통 sub, exp, iat 등의 표준 Claim 외에도, 이메일 같은 커스텀 Claim도 추가할 수 있다.

JWT 표준 Claim 예시

Claim설명
iss토큰 발급자
sub토큰 제목 (유저 식별용)
aud토큰 대상자
exp만료 시간
nbfNot Before (활성 시작 시간)
iat발급 시간
jti고유 ID (토큰 식별자)

⚠ 주의

Payload는 암호화되어 있지 않기 때문에, 민감한 정보(비밀번호, 주민번호 등)를 담으면 안 된다! 누구든지 쉽게 디코딩해서 내용을 확인할 수 있다.

3️⃣ Signature

  • Header + Payload를 서버의 비밀 키(개인키)로 서명한 값
  • 위변조 방지 기능을 수행
  • 해커가 Payload를 조작하면, 서버에서 서명을 검증할 때 불일치로 인해 인증이 거절된다 !


3. JWT 인증 과정

JWT를 이용한 인증은 다음과 같은 흐름으로 이루어진다:

  1. 사용자가 아이디와 비밀번호로 최초 로그인 요청
  2. 서버는 사용자 인증 후 JWT 토큰 생성 → 클라이언트에게 전달
  3. 클라이언트는 이후 요청 시마다 JWT를 Authorization Header에 담아서 서버에 요청
  4. 서버는 토큰의 Signature 검증, 만료 시간 확인, Claim 정보 확인 등을 통해 요청을 처리

✅ Authorization Header 예시:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...


4. AccessToken & RefreshToken

JWT 인증 시스템에서는 보안성과 사용자 경험을 고려해 AccessTokenRefreshToken을 나누어 사용한다

1️⃣ AccessToken

  • 로그인 성공 시 발급되는 주요 인증 수단
  • 유효 기간이 짧음 (예: 1시간) → 그래야 토큰 탈취 위협에 대응 가능
  • 클라이언트가 요청할 때마다 헤더에 담아 보내야 함

2️⃣ RefreshToken

  • AccessToken이 만료되었을 때, 새로운 AccessToken을 재발급받기 위한 용도
  • 보통 서버 DB에 저장되고, 클라이언트는 저장하지 않음
  • 유효 기간이 김 (예: 7일)

5. 왜 AccessToken과 RefreshToken을 나눌까?

문제 상황:

AccessToken만 사용할 경우, 보안 때문에 만료 시간을 짧게 해야 함 → 사용자 경험이 나빠짐 (자주 로그인 필요)

✅ 해결책:

  • AccessToken은 짧게 유지해서 탈취 위험을 줄임
  • 대신 RefreshToken을 이용해, AccessToken이 만료되었을 때 재로그인 없이 자동 갱신

✅ 흐름 요약

  1. AccessToken 만료 → 서버로 요청 시 실패
  2. 클라이언트는 RefreshToken으로 새 AccessToken 요청
  3. 서버는 RefreshToken 유효성 검증 후 새 AccessToken 발급
  4. 클라이언트는 새 토큰으로 요청 재시도 → 사용자 입장에선 끊김 없이 사용 가능


참고 자료

profile
배운 내용을 바로바로 기록하자!

0개의 댓글