JSON 웹 토큰(JWT)이란 무엇인가요?
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
보안
대상자
- 웹/앱 개발자, 인증 시스템 설계자
- 중급 이상의 보안 및 인증 관련 지식 보유자
핵심 요약
- JWT는
Header.Payload.Signature
구조로 구성된 암호화된 JSON 데이터로, Base64Url로 인코딩됨 - 사용자 인증 및 권한 부여를 위한 토큰 기반 인증 방식으로,
Authorization
헤더에Bearer token
형태로 전송 - 보안 강화를 위해 HTTPS 사용, 시간 제한 설정, HttpOnly 쿠키 저장 권장
섹션별 세부 요약
1. JWT의 정의 및 기본 구조
- JWT는 RFC 7519 표준에 따라 설계된 안전한 정보 전달 프로토콜
- Header
alg
(HS256, RS256 등)과typ
(JWT
)으로 구성- Base64Url 인코딩
- Payload
- 사용자 정보(claims)를 포함, 수정 불가능하지만 해독 가능
- Base64Url 인코딩
- Signature
- Header + Payload + 비밀키(또는 공개/비밀 키 쌍)로 생성
- Base64Url 인코딩
2. JWT의 사용 흐름
- 사용자 로그인
- 클라이언트가 사용자 인증 정보를 서버에 전송
- JWT 생성 및 발급
- 서버가 인증 성공 시 사용자 정보를 포함한 JWT 생성
- HMAC, RSA, ECDSA 등 알고리즘으로 서명
- JWT 저장 및 전송
- 클라이언트가 JWT를
localStorage
또는HttpOnly
쿠키에 저장 - 보호된 API 요청 시
Authorization: Bearer
헤더에 포함
- JWT 검증
- 서버가 토큰의 서명, 유효 기간, 구조 검증
3. 보안 고려사항
- HTTPS 강제 사용
man-in-the-middle
공격 방지- 토큰 유효 기간 설정
exp
클레임으로 시간 제한 적용- 안전한 저장 방식
HttpOnly
쿠키 사용,localStorage
사용 금지- 암호화 알고리즘 선택
- HS256(비대칭), RS256(대칭) 등 보안 강도 높은 알고리즘 사용 권장
결론
- JWT는 간단한 구조와 높은 유연성을 갖지만, 보안 취약점이 있으므로 반드시 HTTPS, HttpOnly 쿠키, 시간 제한 적용
Authorization
헤더에Bearer token
방식으로 전송하는 것이 표준