전체 목록
보안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

  1. Header (헤더):

    • 토큰의 타입(typ: JWT)과 사용된 해싱 알고즘(alg: HS256, RS256 등) 정보를 담고 있습니다.
    • Base64Url로 인코딩됩니다.
  2. Payload (페이로드):

    • 실제 전달할 데이터인 Claim들을 담고 있습니다. (사용자 ID, 만료 시간 exp, 발행 시간 iat 등)
    • 주의: 누구나 디코딩하여 내용을 볼 수 있으므로, 비밀번호와 같은 민감한 정보는 절대 넣으면 안 됩니다.
    • Base64Url로 인코딩됩니다.
  3. Signature (서명):

    • 토큰이 변조되지 않았음을 증명합니다.
    • Base64(Header) + "." + Base64(Payload)를 서버만 알고 있는 **비밀키(Secret Key)**와 함께 해싱하여 생성합니다.

장점

  • Stateless (무상태성): 서버가 세션 정보를 저장할 필요가 없어 확장성이 매우 높습니다.
  • Scalability (확장성): 여러 서버가 동일한 비밀키만 공유하면 어디서든 토큰을 검증할 수 있습니다.
  • Cross-Domain: 쿠키를 사용하기 어려운 환경이나 서로 다른 도메인 간의 인증에 유용합니다.

단점

  • 크기: 데이터가 많아질수록 토큰의 길이가 길어져 네트워크 부하가 생길 수 있습니다.
  • 제어 불가능: 토큰이 발급되면 만료될 때까지 서버가 강제로 무효화하기 어렵습니다. (이를 해결하기 위해 Refresh Token 사용)
  • 보안 위험: Payload가 공개되어 있으므로 민감한 정보를 담을 수 없습니다.
  • 토큰 탈취 시 위험: 탈취당하면 만료 전까지 공격자가 자유롭게 사용할 수 있습니다.

관련 질문

같은 카테고리/태그 기준