
JWT (JSON Web Token)란 무엇인가요?
JWT (JSON Web Token)는 두 당사자 간에 정보를 JSON 객체로 안전하게 전송하기 위한 개방형 표준(RFC 7519)입니다. 컴팩트하고 자가 수용적인(self-contained) 구조 덕분에 인증 및 정보 교환에 널리 사용됩니다.
JWT의 구조
JWT는 점(.)으로 구분된 세 부분으로 구성됩니다:
- Header (헤더): 토큰의 유형(JWT)과 서명 알고리즘(예: HS256, RS256) 정보를 담고 있습니다.
- Payload (페이로드): 클레임(사용자 정보 또는 만료 시간과 같은 메타데이터)을 담고 있습니다.
- Signature (서명): 데이터 무결성을 보장하기 위해 인코딩된 헤더, 페이로드를 비밀키 또는 공개키로 서명하여 생성합니다.
주요 활용 사례
- 인증 (Authentication): 사용자가 로그인하면 이후 요청에 JWT가 포함되어 해당 토큰으로 허용된 경로 및 리소스에 접근할 수 있게 합니다.
- 정보 교환: JWT는 서명 및 검증이 가능하므로 데이터를 안전하게 전송하는 좋은 방법입니다.
보안 베스트 프랙티스
- 민감한 데이터 저장 금지: 페이로드는 Base64Url로 인코딩되어 있을 뿐 암호화된 것이 아닙니다. 누구나 디코딩할 수 있습니다.
- 강력한 알고리즘 사용: 분산 시스템에서는 HS256(대칭키)보다 RS256(비대칭키)을 사용하는 것이 보안상 유리합니다.
- 짧은 만료 시간 설정: 토큰이 탈취되었을 때의 리스크를 최소화하기 위해 유효 기간을 짧게 설정하세요.
- 서명 검증 필수: 데이터를 신뢰하기 전에 반드시 서버 측에서 토큰의 서명을 검증해야 합니다.
JWT 디버깅
JWT 검증에 실패할 경우 다음 사항을 확인하세요:
- 토큰이 만료되었는가 (
exp클레임)? - 제공된 공개키/비밀키가 서명과 일치하는가?
iss(발행자) 또는aud(대상) 클레임이 정확한가?
JWT 디버거 도구를 사용하면 내용을 쉽게 확인하고 서명을 테스트할 수 있습니다.