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 타임스탬프가 과거에 있음을 의미합니다. 서버는 만료된 토큰을 거부합니다. 새 토큰을 받으려면 다시 인증해야 합니다.