JWT Header·Payload base64url 디코드 · 시간 클레임 사람이 읽는 형식 · 브라우저에서 바로 처리(서버 전송 없음)

JWT 디코더는 무엇을 보여주나요

JWT는 점 두 개로 나뉜 세 덩어리, 즉 헤더와 페이로드와 서명으로 이뤄진 토큰입니다. 앞의 두 덩어리는 JSON을 base64url로 인코딩한 것뿐이라 사람이 읽을 수 있는 내용인데, 눈으로는 알아볼 수 없는 문자열 뭉치로 보입니다. 이 페이지는 그 토큰을 붙여넣으면 헤더와 페이로드를 디코드해 들여쓴 JSON으로 펼쳐 주고, 서명 부분은 원문 그대로 따로 보여줍니다.

페이로드에 시간 관련 클레임이 들어 있으면 아래쪽에 사람이 읽는 형식으로 한 번 더 정리해 줍니다. exp(만료), iat(발급), nbf(유효 시작), auth_time(인증 시각)을 한국 표준시로 변환해 보여주고, exp가 현재 시각보다 이전이면 만료됨으로, nbf가 아직 오지 않았으면 유효 전으로 표시합니다. 토큰이 왜 거부되는지 확인할 때 이 줄만 봐도 판단이 되는 경우가 많아요.

꼭 알아 두셔야 할 두 가지가 있습니다. 첫째, 이 도구는 서명을 검증하지 않습니다. 비밀키나 공개키를 입력받는 칸 자체가 없고, 서명 덩어리는 base64url 원문 그대로 화면에 옮길 뿐입니다. 따라서 여기서 내용이 잘 보인다는 사실이 그 토큰이 위조되지 않았다는 증거가 되지는 않습니다. 둘째, 붙여넣은 토큰은 어디로도 전송되지 않습니다. 디코딩은 브라우저의 atob와 자바스크립트가 전부 처리하며 이 페이지에는 네트워크로 데이터를 보내는 코드가 없습니다. 반대로 JWT 페이로드는 암호화된 것이 아니라 단순 인코딩이라는 점도 기억해 주세요. 토큰을 가진 사람은 누구나 그 안의 내용을 읽을 수 있습니다.

사용 방법

  1. 토큰 칸에 header.payload.signature 형태의 문자열을 붙여넣습니다. 입력하는 순간 바로 디코드됩니다.
  2. Header 카드에서 알고리즘(alg)과 타입(typ), 키 식별자(kid) 같은 값을 확인합니다.
  3. Payload 카드에서 클레임을 읽고, 그 아래 시간 표시로 만료 여부를 확인합니다.
  4. 필요하면 각 카드의 복사 버튼으로 정렬된 JSON을 클립보드에 담습니다.

궁금한 사항 있으신가요?