
JWT는 Json Web Token의 약자로, 웹에서 인증 및 정보 전달을 위해 널리 사용되는 토큰 기반 인증 방식이다.
주로 클라이언트와 서버 간의 인증에 사용되며, 토큰 자체에 필요한 정보를 담아 별도의 세션 저장소 없이 인증을 처리할 수 있다.
JWT는 아래와 같이 3개의 부분으로 구성된다.
| 구성 요소 | 설명 |
|---|---|
| Header | 토큰의 타입(JWT)과 서명에 사용된 알고리즘 정보가 담김 |
| Payload | 실제로 전달하고자 하는 정보(클레임, 예: 사용자 ID, 권한 등) |
| Signature | 위변조 방지를 위한 서명. Header와 Payload를 비밀키로 암호화 |
.(점)으로 구분된다.xxxxx.yyyyy.zzzzz
- 로그인 요청: 사용자가 ID/PW로 로그인 요청한다
- 토큰 발급: 서버가 사용자 정보를 확인 후 JWT를 생성해 클라이언트에 전달한다.
- 토큰 저장: 클라이언트는 JWT를 저장한다.
- 인증 요청: 클라이언트가 서버에 요청 시 JWT를 HTTP 헤더(Authorization)에 포함한다.
- 검증 및 응답: 서버는 JWT의 유효성을 검증 후 요청 처리한다.
- Stateless: 서버가 별도의 세션 저장소를 관리하지 않아도 된다.
- 확장성: 마이크로서비스 등 분산 환경에서 인증 서버에 의존하지 않고 사용 가능하다.
- 위변조 방지: 서명(Signature)으로 토큰의 변조 여부를 쉽게 확인할 수 있다.
- 편리한 정보 전달: 인증에 필요한 정보를 토큰에 직접 담아 전송한다.
- Payload 노출: Payload는 암호화되지 않아 민감한 정보는 담으면 안된다.
- 토큰 탈취 위험: 토큰이 유출되면 만료 전까지 누구나 사용할 수 있다.
- 토큰 폐기 어려움: 서버에서 토큰을 강제로 만료시키기 어렵다.
- 토큰 크기: 세션 ID보다 크기가 커 네트워크 비용이 증가할 수 있다.
민감 정보는 Payload에 저장하지 않아야하고
HTTPS 사용으로 토큰 탈취 방지 주의
적절한 만료 시간 설정
Refresh Token과 Access Token 분리 사용 권장등이 있다.
| 활용 분야 | 설명 | 장점 및 특징 |
|---|---|---|
| 사용자 인증 세션 관리 | 로그인 후 JWT 발급, 요청 시 JWT로 인증 유지 | 서버 세션 저장 불필요, 확장성 우수 |
| API 권한 제어 | JWT에 권한 정보 포함, API 접근 시 권한 검증 | 무상태(stateless), 빠른 인증 처리 |
| 단일 로그인(SSO) | 여러 서비스 간 JWT 공유로 통합 인증 제공 | 사용자 편의성 증대, 신뢰성 있는 토큰 |
| 서버 간 정보 교환 | 서명된 JWT로 안전한 데이터 전송 및 무결성 보장 | 안전하고 신뢰성 높은 통신 |
| 로그아웃 처리 | 클라이언트 토큰 삭제, 서버 블랙리스트 관리 | 보안 강화, 탈취 토큰 차단 가능 |
JWT는 간편하고 확장성 있는 인증 방식으로,
최근 웹 서비스에서 많이 사용되고 있는 방식이다.
하지만 보안상의 단점도 존재하므로, 장단점을 잘 이해하고 적절히 사용하는 것이 중요하다.