보안Medium#409
JWT(JSON Web Token)의 구조와 장단점에 대해 설명해주세요.
#보안#JWT#인증#토큰
답변 포인트
Header, Payload, Signature 구조와 세션 방식 대비 장단점을 생각해보세요.
정답 및 해설
빠른 요약
JWT는 정보를 JSON 객체로 안전하게 전송하기 위한 개방형 표준(RFC 7519)입니다. 주로 인증(Authentication) 및 인가(Authorization)에 사용됩니다.
JWT는 정보를 JSON 객체로 안전하게 전송하기 위한 개방형 표준(RFC 7519)입니다. 주로 인증(Authentication) 및 인가(Authorization)에 사용됩니다.
JWT의 구조
JWT는 점(.)으로 구분된 세 부분으로 구성됩니다: Header.Payload.Signature
-
Header (헤더):
- 토큰의 타입(
typ: JWT)과 사용된 해싱 알고즘(alg: HS256, RS256 등) 정보를 담고 있습니다. - Base64Url로 인코딩됩니다.
- 토큰의 타입(
-
Payload (페이로드):
- 실제 전달할 데이터인 Claim들을 담고 있습니다. (사용자 ID, 만료 시간
exp, 발행 시간iat등) - 주의: 누구나 디코딩하여 내용을 볼 수 있으므로, 비밀번호와 같은 민감한 정보는 절대 넣으면 안 됩니다.
- Base64Url로 인코딩됩니다.
- 실제 전달할 데이터인 Claim들을 담고 있습니다. (사용자 ID, 만료 시간
-
Signature (서명):
- 토큰이 변조되지 않았음을 증명합니다.
Base64(Header) + "." + Base64(Payload)를 서버만 알고 있는 **비밀키(Secret Key)**와 함께 해싱하여 생성합니다.
장점
- Stateless (무상태성): 서버가 세션 정보를 저장할 필요가 없어 확장성이 매우 높습니다.
- Scalability (확장성): 여러 서버가 동일한 비밀키만 공유하면 어디서든 토큰을 검증할 수 있습니다.
- Cross-Domain: 쿠키를 사용하기 어려운 환경이나 서로 다른 도메인 간의 인증에 유용합니다.
단점
- 크기: 데이터가 많아질수록 토큰의 길이가 길어져 네트워크 부하가 생길 수 있습니다.
- 제어 불가능: 토큰이 발급되면 만료될 때까지 서버가 강제로 무효화하기 어렵습니다. (이를 해결하기 위해 Refresh Token 사용)
- 보안 위험: Payload가 공개되어 있으므로 민감한 정보를 담을 수 없습니다.
- 토큰 탈취 시 위험: 탈취당하면 만료 전까지 공격자가 자유롭게 사용할 수 있습니다.