Backend/Java

Spring Boot - JWT

개발자의 첫 걸음 2025. 8. 31. 14:00

안녕하세요.  오늘은 JWT에 대해 알아볼게요.

 

 

JWT이란?

 

JWT(JSON Web Token)으로 "JSON" 객체를 이용하여

 

인증 정보를 안전하게 "전달"하는 토큰 기반 인증 방식으로

 

서버가 클라이언트(사용자)에게 발급하는 디지털 서명이 된 토큰이에요.

 

사용자의 인증 상태를 유지하고 서버에 전달 가능해요.

 

 

JWT와 인증/인가의 관계

 

인증(로그인) 시 서버는 사용자 정보를 기반으로 JWT 발급이 되고

 

이후 사용자는 요청마다 JWT를 서버에 전달하여 인증받아요.

 

인가는 JWT의 사용자 권한 정보(ROLE, AUTHORITY 등)가 포함될 수 있고,

 

서버는 JWT를 해석해서 해당 사용자가 어떤 API나 리소스에 접근할 수 있는지 판단해요.

 

 

JWT 인증 과정

 

첫 번째 사용자가 로그인 시 서버는 JWT 발급하고,

 

두 번째 사용자가 서버에 요청을 보낼 때 "HTTP 요청 헤더(Authorization)에 JWT 포함해요.

 

Authorization:  Bearer <JWT 토큰값>

 

세 번째 서버는 전달받은 JWT를 검증하여 요청 사용자의 인증 여부 판단해요.

 

 

+) Bearer Token

 

소지자(Bearer)는 토큰을 소지한 사람(클라이언트)이 곧 인증된 사용자임을 의미로

 

OAuth 2.0 인증 방식 중하나이고, API 요청 시 인증을 위해 사용해요.

 

그리고 JWT를 Bearer Token으로 활용이 가능할 수도 있어요.

Bearer Token
  ├── JWT        ✅ (자주 사용됨)
  ├── Opaque Token (랜덤 문자열 등) ❌ JWT 아님
  └── 기타 토큰 형식

 

JWT는 토큰의 내용 형식이고, Bearer Token은 인증 전달 방식이에요.

 

JWT를 Bearer로 쓸 수 있지만 서로 동의어는 아니니 사용 시 조심하세요!

 

 

JWT 구조 (Bearer Token 구조)

 

마침표를 기준으로 헤더(header), 내용(payload), 서명(signature)으로 이루어지고 있어요,

 

헤더는 토큰 타입으로 해싱 알고리즘 정보를 포함하고,

 

내용은 사용자 정보나 권한 같은 클레임(claim)을 포함으로 Base64로 인코딩과 암호화하지 않아요. 

 

서명은 헤더나 내용을 조합하여 주어진 비밀키로 서명한 값이에요.

 

 

 

 

여기까지 JWT에 간단하게 알아봤는데요.

 

코드 보안에 중요한 내용인 만큼 많은 자료를 보셔서 공부하시면 좋을 것 같아요.

'Backend > Java' 카테고리의 다른 글

@Transactional  (0) 2025.09.04
Spring Security - Filter, Provider, Config  (0) 2025.09.02
Spring Security  (2) 2025.08.29
Java - List vs Set  (0) 2025.08.25
Spring Boot - 필터링 & 검색 기능  (0) 2025.08.22