티스토리 뷰

SpringBoot

JWT 구조 및 Token 발급 과정

얀타호수 2025. 11. 12. 10:40

JWT(JSON Web Token)는 “JSON 형태로 표현된 웹 토큰” 입니다.

JWT는 인증(Authentication)과 인가(Authorization)를 위해 사용되는 토큰 기반 인증 방식입니다ㅓ.
사용자가 로그인하면 서버가 “이 사용자는 인증된 사용자임”을 증명하는 서명된 토큰을 만들어 주고
이 토큰을 클라이언트가 이후 요청마다 들고 다니면서 인증을 대신합니다.

 

출처: Google


1️⃣ JWT 구조 이해

JWT는 세 부분으로 나뉩니다.

 

  • Header: 토큰 타입(JWT)과 해시 알고리즘(예: HS256) 정의
  • Payload: 토큰에 담길 정보(claims) — 보통 sub, iat, exp, role 등
  • Signature: Header와 Payload를 합쳐 비밀키로 서명한 값, 토큰 변조 방지용

 

HEADER.PAYLOAD.SIGNATURE

 

2️⃣ 사용자 인증

JWT 발급의 첫 단계는 사용자 인증입니다.

  1. 클라이언트가 로그인 요청을 보냅니다.
  2. 서버에서 전달받은 username과 password를 DB에서 조회 후 검증합니다.
  • 패스워드는 일반적으로 BCrypt 등으로 암호화 되어 있어, passwordEncoder.matches(rawPassword, encodedPassword)로 비교합니다.
  • 인증 실패 시 401을 반환합니다.
POST /login
Content-Type: application/json

{
  "username": "user1",
  "password": "1234"
}

 

3️⃣ JWT 토큰 생성

사용자 인증이 성공하면 서버가 JWT를 발급합니다.

JWT 생성 흐름:

  1. Header: 토큰 타입과 해시 알고리즘 지정
  2. Payload: 사용자 정보 및 토큰 만료 시간 등 정의
  3. Signature: Header + Payload를 비밀키로 서명
 

4️⃣ 클라이언트에 토큰 전달

  • 서버는 생성된 JWT를 HTTP 응답으로 반환합니다.
  • 또는 Authorization 헤더에 포함시켜 반환 가능
{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
HTTP/1.1 200 OK
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

 

5️⃣ 서버 내부 처리 요약

서버 관점에서 JWT 발급 과정은 다음과 같습니다:

  1. 로그인 요청 수신
  2. 사용자 인증 (DB 조회 + 비밀번호 검증)
  3. JWT 토큰 생성
    • Header, Payload 구성
    • 비밀키로 서명
  4. 클라이언트에 JWT 반환