JWT 토큰 디코딩하고 이해하는 방법

개발자

JSON Web Token(JWT)이 포함하는 내용, 페이로드를 읽기 위한 디코딩 방법, 라이브러리 없이 구조를 확인하는 방법을 알아보세요.

JWT란?

JSON Web Token(JWT)은 두 당사자 간에 클레임(주장)을 전달하기 위한 간결하고 URL에 안전한 형식으로, RFC 7519로 표준화되었으며 현대 API 인증과 SSO(단일 로그인) 흐름의 사실상 표준이 되었습니다. JWT는 작은 JSON과 암호화 서명을 한 줄의 문자열에 담고 있어, 누구나 내용을 읽을 수 있지만 유효한 토큰을 발급할 수 있는 것은 서명 키를 가진 서버뿐입니다. 이 성질 덕분에 서버는 세션을 저장할 필요가 없으며, 사용자 ID·권한·만료 시간 같은 정보가 토큰 자체에 담긴 "무상태(stateless)" 인증이 가능해집니다.

자주 쓰이는 상황

  • API 인증

    사용자가 한 번 로그인하면 JWT가 발급되고, 이후 모든 요청은 Authorization: Bearer 헤더에 토큰을 실어 보냅니다. API는 서명만 검증하면 신원과 권한을 신뢰할 수 있어 DB 조회가 필요 없습니다.

  • 단일 로그인(SSO)

    OpenID Connect는 JWT 위에 세워져 있습니다. ID 제공자가 발급한 ID 토큰을 하위 앱들이 공개된 JWKS 엔드포인트로 검증해 로그인 상태를 공유합니다.

  • 일회성 단기 접근

    비밀번호 재설정, 이메일 확인, 서명된 다운로드 URL 같은 일회성 용도에 적합합니다. exp 클레임에 만료 시간을 넣어두면 링크가 자동으로 무효화됩니다.

단계별 가이드

1

JWT 구조 이해하기

JWT는 점으로 구분된 세 가지 Base64URL 인코딩 부분으로 구성됩니다: 헤더.페이로드.서명. 헤더는 알고리즘을 지정하고, 페이로드는 클레임(데이터)을 포함하며, 서명은 무결성을 검증합니다.

2

헤더 디코딩하기

첫 번째 점 앞부분을 가져와 Base64URL 디코딩을 하세요. {"alg":"HS256","typ":"JWT"}와 같은 JSON 객체를 얻게 됩니다. 이는 사용된 서명 알고리즘을 알려줍니다.

3

페이로드 디코딩하기

두 번째 부분을 Base64URL 디코딩합니다. sub(주체/사용자 ID), exp(만료 Unix 타임스탬프), iat(발행 시간), iss(발행자) 및 커스텀 클레임 등을 볼 수 있습니다.

4

만료 시간 확인하기

exp 클레임은 Unix 타임스탬프입니다. 현재 시간과 비교하여 토큰이 아직 유효한지 확인하세요. 예: exp: 1700000000 = 2023년 11월 14일 22:13 UTC.

5

JWT 디코더 사용하기

JWT를 JWT 디코더 도구에 붙여넣으면 디코딩된 헤더, 페이로드, 서명 섹션을 포맷된 JSON으로 즉시 표시합니다. 서버 불필요, 모든 것이 브라우저에서 실행됩니다.

무료 도구 사용

JWT 디코더

자주 묻는 질문

Q: 브라우저에서 JWT를 디코딩하는 것이 안전한가요?

A: 네—디코딩(페이로드 읽기)은 안전합니다. JWT는 Base64URL 인코딩이며 암호화가 아닙니다. 토큰은 액세스 권한을 부여하므로 신뢰할 수 없는 제3자 사이트와 공유하지 마세요.

Q: 비밀키 없이 JWT 서명을 검증할 수 있나요?

A: 아니요. 서명 검증에는 HMAC의 경우 비밀키, RSA/ECDSA의 경우 공개키가 필요합니다. 디코더는 구조를 보여주지만 키 없이는 서명을 검증할 수 없습니다.

Q: 「JWT 만료」는 무슨 의미인가요?

A: exp 타임스탬프가 과거에 있음을 의미합니다. 서버는 만료된 토큰을 거부합니다. 새 토큰을 받으려면 다시 인증해야 합니다.