JWT Header·Payload base64url 디코드 · 시간 클레임 사람이 읽는 형식 · 브라우저에서 바로 처리(서버 전송 없음)
Header
Payload
Signature
서명은 원문(base64url) 그대로 표시합니다. 이 도구는 서명 검증을 하지 않습니다.
JWT 디코더는 무엇을 보여주나요
JWT는 점 두 개로 나뉜 세 덩어리, 즉 헤더와 페이로드와 서명으로 이뤄진 토큰입니다. 앞의 두 덩어리는 JSON을 base64url로 인코딩한 것뿐이라 사람이 읽을 수 있는 내용인데, 눈으로는 알아볼 수 없는 문자열 뭉치로 보입니다. 이 페이지는 그 토큰을 붙여넣으면 헤더와 페이로드를 디코드해 들여쓴 JSON으로 펼쳐 주고, 서명 부분은 원문 그대로 따로 보여줍니다.
페이로드에 시간 관련 클레임이 들어 있으면 아래쪽에 사람이 읽는 형식으로 한 번 더 정리해 줍니다. exp(만료), iat(발급), nbf(유효 시작), auth_time(인증 시각)을 한국 표준시로 변환해 보여주고, exp가 현재 시각보다 이전이면 만료됨으로, nbf가 아직 오지 않았으면 유효 전으로 표시합니다. 토큰이 왜 거부되는지 확인할 때 이 줄만 봐도 판단이 되는 경우가 많아요.
꼭 알아 두셔야 할 두 가지가 있습니다. 첫째, 이 도구는 서명을 검증하지 않습니다. 비밀키나 공개키를 입력받는 칸 자체가 없고, 서명 덩어리는 base64url 원문 그대로 화면에 옮길 뿐입니다. 따라서 여기서 내용이 잘 보인다는 사실이 그 토큰이 위조되지 않았다는 증거가 되지는 않습니다. 둘째, 붙여넣은 토큰은 어디로도 전송되지 않습니다. 디코딩은 브라우저의 atob와 자바스크립트가 전부 처리하며 이 페이지에는 네트워크로 데이터를 보내는 코드가 없습니다. 반대로 JWT 페이로드는 암호화된 것이 아니라 단순 인코딩이라는 점도 기억해 주세요. 토큰을 가진 사람은 누구나 그 안의 내용을 읽을 수 있습니다.
사용 방법
토큰 칸에 header.payload.signature 형태의 문자열을 붙여넣습니다. 입력하는 순간 바로 디코드됩니다.
Header 카드에서 알고리즘(alg)과 타입(typ), 키 식별자(kid) 같은 값을 확인합니다.
Payload 카드에서 클레임을 읽고, 그 아래 시간 표시로 만료 여부를 확인합니다.
필요하면 각 카드의 복사 버튼으로 정렬된 JSON을 클립보드에 담습니다.
궁금한 사항 있으신가요?
A확인하지 않습니다. 비밀키나 공개키를 받는 입력칸이 없고 서명 덩어리를 그대로 표시할 뿐입니다. 내용이 잘 디코드된다고 해서 유효한 토큰이라는 뜻은 아니니, 실제 검증은 서버에서 해야 합니다.
A이 페이지는 토큰을 전송하지 않으므로 브라우저 밖으로 나가지 않습니다. 다만 화면에 클레임이 그대로 보이므로 주변에 사람이 있는 곳이라면 조심하고, 작업이 끝나면 지우기를 눌러 입력칸을 비우기를 권합니다.
A브라우저의 현재 시각을 초 단위로 바꿔 exp 값과 비교합니다. exp가 더 작으면 만료됨, 그렇지 않으면 유효로 표시하고, nbf가 현재보다 미래면 아직 유효 전으로 알려 줍니다. 기기 시계가 틀어져 있으면 판정도 어긋날 수 있어요.
A유닉스 초 값을 Asia/Seoul 기준으로 변환해 KST를 붙여 표시합니다. 접속한 기기의 시간대와 상관없이 항상 한국 시간으로 보여주므로, 해외 서버 로그와 대조할 때는 시차를 감안해 주세요.
A점으로 나뉜 덩어리가 두 개 미만이면 이 메시지가 나옵니다. 토큰 앞에 Bearer 같은 접두어가 붙어 있거나 줄바꿈으로 잘려 있는 경우가 많으니, 순수한 토큰 문자열만 남기고 다시 붙여넣어 보세요.
A됩니다. 헤더와 페이로드만 있으면 디코드하고, 서명 카드에는 서명 없음이라고 표시합니다. alg가 none인 토큰을 점검할 때 유용해요.
A깨지지 않습니다. base64url을 바이트로 되돌린 뒤 UTF-8로 복원하는 단계를 거치기 때문에 한글 이름이나 이모지가 들어 있어도 그대로 읽힙니다.
A이 페이지는 읽기 전용 디코더입니다. 토큰 생성이나 재서명 기능은 없고, 그런 작업은 키를 다루는 일이라 서버나 로컬 도구에서 처리해야 합니다.