JWT 디코더: 헤더, 페이로드, 만료일 확인

JSON 웹 토큰(JWT)을 즉시 디코딩하세요. 헤더와 페이로드를 안전하게 확인하세요.

JWT 디코더

문제 신고

JWT 디코더: 헤더, 페이로드, 만료일 확인에 대한 버그나 제안이 있으신가요? 알려주세요!

이 JWT 디코더가 토큰을 읽는 방식

JSON Web Token은 헤더, 페이로드, 서명이라는 세 부분을 하나의 문자열에 담습니다. 이 디코더는 인코딩된 토큰을 이 세 부분으로 나누고, 헤더와 페이로드를 다시 읽기 쉬운 JSON으로 변환하며, 알고리즘과 발급 시각, 만료 시각을 추출해서 코드를 작성하지 않고도 토큰 내용을 확인할 수 있게 해줍니다.

헤더, 페이로드, 서명

토큰은 두 개의 점으로 헤더.페이로드.서명, 세 부분으로 나뉩니다. 앞의 두 부분은 base64url로 인코딩된 JSON이므로 이를 디코딩하는 것은 암호화를 푸는 것이 아니라 되돌릴 수 있는 변환일 뿐입니다. 헤더에는 서명 알고리즘(alg 클레임, 예를 들어 HS256이나 RS256)과 토큰 유형이 담겨 있습니다. 페이로드에는 클레임이 들어 있는데, subject 식별자와 애플리케이션별 필드, 그리고 보통 Unix 초 단위로 저장된 iat(발급 시각)와 exp(만료 시각)가 포함됩니다. 서명은 헤더와 페이로드로부터 계산된 암호학적 값으로, 이를 확인하려면 서명을 만든 비밀 키나 개인 키가 필요합니다. 따라서 토큰의 내용을 읽는 것과 토큰이 진짜인지 검증하는 것은 서로 다른 작업입니다. 일부 토큰은 alg를 none으로 설정해 서명 없이 헤더.페이로드 두 부분으로만 이루어지는데, 이 디코더는 이런 짧은 형식도 받아들이며 서명 부분은 비워 둡니다. base64url은 일반 base64와 달리 더하기 기호와 슬래시 대신 하이픈과 밑줄을 사용하고, 채움 문자인 등호도 대부분 생략하기 때문에 이 디코더는 이 문자들을 먼저 원래대로 되돌린 뒤 JSON으로 해석합니다.

실제 예시로 확인하기

아래와 같은 토큰을 붙여넣으면 세 개의 색으로 구분된 구간으로 나뉘고, 이어서 헤더와 페이로드가 정돈된 JSON 형태로 표시됩니다. 세 구간은 각각 다른 색으로 표시되어 어디까지가 헤더이고 어디부터가 페이로드인지 한눈에 구분할 수 있습니다.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxOTM4NDc1NjEwIiwibmFtZSI6Ikppc29vIEtpbSIsImlhdCI6MTcyMTM5MDQwMCwiZXhwIjoxNzI5MTY2NDAwfQ.rnLRcpKIfGKdevSGHY6eUSZ4YDM

{
  "alg": "HS256",
  "typ": "JWT"
}

{
  "sub": "1938475610",
  "name": "Jisoo Kim",
  "iat": 1721390400,
  "exp": 1729166400
}

Algorithm 배지에는 헤더에서 읽은 HS256이 표시됩니다. iat 값은 2024년 7월 19일로, exp 값은 2024년 10월 17일로 변환되며, 이 날짜가 이미 지났기 때문에 Status 배지에는 EXPIRED가 표시됩니다. 이 과정은 모두 브라우저 안에서 이루어지며 서버로 전송되지 않습니다. 또한 이 도구는 서명을 만든 키에 접근할 수 없기 때문에 서명이 진짜인지는 절대 확인하지 않습니다. 이 예시에서 sub는 사용자를 식별하는 값이고 name은 애플리케이션이 페이로드에 직접 추가한 사용자 지정 클레임으로, 두 값 모두 서명과 무관하게 누구나 읽을 수 있습니다.

자주 묻는 질문