JSON Web Token 디코딩
JSON Web Token(JWT)은 시스템 간에 신원 및 권한 정보를 전달하는 데 사용되는 간결한 문자열로, 로그인 후 Authorization: Bearer 헤더로 가장 많이 사용됩니다. 무작위 텍스트처럼 보이지만, 실제로는 Base64URL로 인코딩된 세 부분인 헤더, 클레임이 포함된 페이로드, 서명으로 구성됩니다. 이 JWT 디코더는 토큰을 분리하고 처음 두 부분을 읽기 쉬운 JSON 형식으로 디코딩하여 중요한 클레임을 설명해 줍니다. 디코딩 및 검증은 로컬에서 이루어지므로 토큰이 외부로 절대 전송되지 않습니다.
주요 기능
- 헤더 및 페이로드 디코딩 후 보기 좋게 정렬(pretty-print)되며, 각각 복사 버튼이 제공됩니다.
- 시간 클레임 설명:
iat,nbf,exp,auth_time값이 에포크(epoch) 초 단위에서 사용자의 시간대에 맞는 날짜로 변환됩니다. - 만료 확인: 토큰이 만료되었는지 또는 아직 활성화되지 않았는지 한눈에 확인할 수 있습니다.
- HMAC 서명 검증: 브라우저의 Web Crypto API를 사용하여 HS256, HS384, HS512 서명을 검증합니다.
- 오프라인 동작: 페이지가 로드된 후에는 오프라인으로 작동하며, 어떠한 데이터도 외부로 전송하지 않습니다.
활용 사례
인증 디버깅. 요청이 401 Unauthorized 오류로 실패할 때, 토큰을 디코딩하여 만료 여부, 올바른 대상(aud)에게 발급되었는지, 예상되는 역할(role)과 범위(scope)가 포함되어 있는지 확인합니다.
API 구축 및 테스트. 배포하기 전에 서버가 의도한 클레임과 정확한 만료 시간을 토큰에 제대로 포함하는지 검증합니다.
OAuth 및 OpenID Connect 작동 방식 학습. 자격 증명 제공자(Identity Provider)가 발급하는 ID 토큰과 액세스 토큰은 대부분 JWT입니다. 테스트 토큰을 디코딩하면 제공자가 사용자에 대해 어떤 정보를 공유하는지 확인할 수 있습니다.
JWT 구조
header.payload.signature
- 헤더 — 토큰의 타입과 서명 알고리즘 (예:
{"alg":"HS256","typ":"JWT"}). - 페이로드 — 클레임(Claims) 정보입니다. 등록된 클레임으로는
iss(발급자),sub(주제, 주로 사용자 ID),aud(대상자),exp,nbf,iat,jti(토큰 ID)가 있습니다. 애플리케이션은name이나role같은 커스텀 클레임을 추가할 수 있습니다. - 서명 — 시크릿 키(HMAC)나 개인 키(RSA, ECDSA, EdDSA)를 사용해
header.payload를 서명하여 생성합니다. 누군가 헤더나 페이로드의 글자 하나라도 변경하면 서명이 더 이상 일치하지 않게 됩니다.
페이로드는 암호화되지 않고 인코딩만 되므로, 비밀번호와 같은 민감한 정보를 JWT에 포함해서는 절대 안 됩니다. 다른 Base64 데이터를 디코딩하려면 Base64 도구를 사용하고, 타임스탬프를 확인하려면 Unix 타임스탬프 변환기를 사용해 보세요.