JWT는 "JSON Web Token"의 약자로, JSON 기반의 토큰(Token) 방식 인증을 의미한다. 주로 웹 및 모바일 애플리케이션의 인증(Authentication)과 정보 교환을 위해 사용됨. 기존 세션(Session)이나 쿠키(Cookie) 기반 인증보다 간편하고 확장성이 뛰어난 방식이다!
JWT는 세 부분으로 구성되며, 각각 점(.)으로 구분된다.

헤더는 JWT의 유형과 서명에 사용할 알고리즘을 지정함.
{
"alg": "HS256",
"typ": "JWT"
}
alg: 서명에 사용된 암호화 알고리즘 (예: HS256, RS256 등)typ: 토큰 타입 (항상 "JWT"로 설정됨)페이로드는 사용자 정보 및 토큰의 추가적인 데이터를 포함하는 부분임.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022,
"exp": 1516249022
}
sub (Subject): 사용자의 고유 IDname: 사용자의 이름admin: 관리자 여부iat (Issued At): 토큰이 발행된 시간 (Unix Timestamp)exp (Expiration): 토큰의 만료 시간🚨 주의: 페이로드는 Base64로 인코딩되어 있지만 암호화되지 않으므로 중요한 정보를 저장하면 안됨‼️!
서명은 토큰이 변조되지 않았음을 검증하는 역할.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secretKey
)

1️⃣ 사용자가 로그인 요청을 보냄
👉 클라이언트(사용자)는 아이디와 비밀번호를 입력하여 서버에 로그인 요청을 함.
2️⃣ 서버가 사용자 정보를 확인
👉 서버는 요청을 받아서 DB에서 해당 사용자가 존재하는지 조회.
3️⃣ 서버가 JWT 토큰을 생성
👉사용자가 유효한 계정이라면, 서버는 Secret Key를 사용하여 JWT 토큰을 생성한다.
생성된 JWT는 사용자의 정보를 포함하며, 서버에서 관리할 필요 없이 클라이언트가 보관함.
4️⃣ 서버가 클라이언트에게 JWT 토큰 전달
👉서버는 JWT를 클라이언트(사용자)에게 반환.
이후부터 클라이언트는 이 JWT를 사용하여 API 요청을 보낼 수 있음.
5️⃣ 클라이언트가 API 요청 시 JWT를 포함하여 보냄
👉클라이언트는 API 요청을 보낼 때 JWT를 Authorization: Bearer <토큰> 헤더에 포함합니다.
JWT는 쿠키를 사용할 필요 없이 HTTP 요청 헤더를 통해 전달됨.
6️⃣ 서버가 JWT를 검증하여 사용자 인증 수행
👉서버는 JWT의 서명을 확인하여 변조되지 않았음을 검증한다.
JWT가 유효하면 사용자가 신뢰할 수 있는 사용자임을 확인하고 요청을 처리.
7️⃣ 서버가 API 응답 반환
👉검증이 완료되면, 서버는 요청에 대한 응답을 클라이언트에게 반환.
exp)을 적절히 설정하여 보안을 강화해야 함.| 기능 | JWT | OAuth 2.0 |
|---|---|---|
| 인증 방식 | 자체 검증 | 토큰 발급 및 검증 서버 필요 |
| 보안 수준 | 취약(탈취 가능) | 보안 강화(Access Token + Refresh Token) |
| 사용 용도 | API 인증, 서버 간 통신 | SSO, API 접근 제어 |
| 유효 기간 | 유효 시간 설정 필요 | 자동 갱신 가능 |
JWT는 간단하고 확장성이 뛰어난 인증 방식으로, 특히 API 및 마이크로서비스 환경에서 많이 사용된다. 하지만 보안 취약점이 있을 수 있으므로, 토큰 만료 시간 설정, HTTPS 사용, Refresh Token 활용 등의 보안 조치를 병행함을 잊지 말자.
참고 및 이미지 출처: https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC#jwt_json_web_token_%EC%9D%B4%EB%9E%80
https://velog.io/@chuu1019/%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-JWTJson-Web-Token