Devin.KR

JWT DECODER · CLAIMS READER

JWT 디코더

이 토큰 안에 뭐가 들었을까?

eyJhbGciOi… 로 시작하는 JWT 를 붙여 넣고 디코드를 누르면 헤더와 페이로드를 JSON 으로 펼치고, exp·iat·nbf 를 사람이 읽는 시각으로 바꿔 만료 여부를 알려 줍니다. 서명은 검증하지 않고 내용만 읽습니다.

  • 헤더·페이로드
  • 만료 시각 확인
  • 서명 검증 안 함
  • 브라우저에서만 처리
바로 사용하기 ↓
JWT를 입력하세요.

Header

-

Payload

-

서명 검증을 제공하지 않는 이유

이 도구는 서명 검증을 제공하지 않습니다. 비밀키나 인증정보를 입력받지 않으며, 도구 입력값·인증정보를 서버로 보내지 않는 정책을 지킵니다. 디코딩은 진위 확인이 아니므로 신뢰할 수 없는 토큰의 내용을 인증에 사용하지 마세요.

MADE FOR YOUR WORK

이럴 때 쓰세요

로그인 토큰 내용 확인

개발 중인 서비스가 발급한 액세스 토큰에 사용자 ID·권한 클레임이 제대로 들어갔는지 봅니다.

401 원인 추적

API 가 401 을 돌려줄 때 토큰의 exp 가 이미 지났는지, 서버 시각과 어긋났는지 시각으로 확인합니다.

외부 인증 연동 디버깅

소셜 로그인·SSO 에서 받은 ID 토큰의 iss, aud, sub 값이 설정과 맞는지 대조합니다.

토큰에 민감 정보 점검

페이로드는 누구나 읽을 수 있으므로 비밀번호·주민번호 같은 값이 실려 있지 않은지 검토합니다.

STEP BY STEP

JWT 디코더 사용 방법

이렇게 쓰세요

  1. JWT 붙여 넣기

    JWT 칸에 점(.)으로 구분된 세 부분짜리 토큰을 넣습니다. 앞의 'Bearer ' 는 빼고 넣으세요.

  2. 디코드 누르기

    Header 와 Payload 칸에 각 부분을 JSON 으로 풀어 보여 줍니다.

  3. 시간 클레임 확인

    Payload 아래에 iat·nbf·exp 가 로컬 시각과 UTC(ISO) 로 나옵니다.

  4. 만료 배지 읽기

    exp 가 지났으면 '만료된 토큰', 아니면 '아직 만료되지 않음', 없으면 'exp 클레임 없음'이 표시됩니다.

UNDERSTAND THE BASICS

JWT 는 '암호문'이 아니라 '서명된 메모'다

JWT 는 헤더.페이로드.서명 세 부분을 점으로 이은 문자열입니다. 헤더와 페이로드는 JSON 을 base64url 로 인코딩한 것일 뿐 암호화된 것이 아닙니다. 그래서 이 도구처럼 누구나 내용을 읽을 수 있고, 페이로드에 비밀 정보를 넣으면 안 됩니다.

보안을 지키는 것은 세 번째 부분인 서명입니다. 발급 서버가 헤더와 페이로드를 비밀키(HS256)나 개인키(RS256·ES256)로 서명하고, 받는 서버는 같은 비밀키나 짝이 되는 공개키로 서명을 확인해 내용이 바뀌지 않았음을 믿습니다. 페이로드의 글자 하나만 바꿔도 서명이 맞지 않게 됩니다.

이 도구는 디코드만 하고 서명은 검증하지 않습니다. 검증하려면 키가 필요한데, 키를 웹 페이지에 붙여 넣는 습관 자체가 위험하기 때문입니다. '아직 만료되지 않음'은 토큰이 진짜라는 뜻이 아니라 exp 값이 미래라는 뜻일 뿐입니다.

자주 보는 JWT 클레임
클레임이름뜻
issIssuer발급한 곳
subSubject토큰의 주인(보통 사용자 ID)
audAudience이 토큰을 받을 서비스
expExpiration Time만료 시각(Unix 초)
nbfNot Before이 시각 전에는 쓰면 안 됨(Unix 초)
iatIssued At발급 시각(Unix 초)
jtiJWT ID토큰 고유 번호(재사용 방지용)

JWT 디코더 사용 안내

JWT 헤더와 페이로드를 브라우저에서 디코드하고 exp, iat, nbf 시각과 만료 여부를 확인합니다.

JWT 문자열을 붙여 넣어 헤더와 페이로드를 확인하세요. 디코딩 결과만으로 서명의 진위나 토큰의 신뢰성을 판단할 수 없습니다.

QUICK EXAMPLE

JWT 디코더 사용 예제

입력 · 시작

header.payload.signature

결과 · 확인

헤더와 페이로드의 클레임 읽기

디코딩은 서명 검증이 아닙니다. 이 결과만으로 토큰을 신뢰하면 안 됩니다.

어떻게 구현했나

JWT 의 각 부분은 base64url 로 인코딩돼 있습니다. 일반 base64 와 달리 + 와 / 대신 - 와 _ 를 쓰고 끝의 = 패딩을 생략하므로, 되돌려 놓고 패딩을 채운 뒤 디코드합니다.

디코드한 바이트는 UTF-8 로 읽습니다. atob 의 결과를 그대로 문자열로 쓰면 한글이 든 클레임이 깨집니다.

exp·iat·nbf 는 Unix 초라 사람이 읽을 수 있는 시각으로 바꿔 보여주고, exp 가 지났으면 만료로 표시합니다.

**서명은 검증하지 않습니다.** 검증하려면 비밀키나 공개키가 있어야 하고, 그것을 이 화면에 입력하게 만들 수는 없습니다. 여기서 '만료되지 않음'은 토큰이 유효하다는 뜻이 아니라 exp 값이 미래라는 뜻일 뿐입니다. 내용은 누구나 읽을 수 있으니, 붙여넣기 전에 그 토큰이 아직 살아 있는 것인지 생각하세요.

BEFORE YOU FINISH

자주 하는 실수

디코드된 내용을 믿고 인가한다

서버에서 서명 검증 없이 페이로드의 role 같은 값을 그대로 쓰면 누구나 토큰을 고쳐 관리자가 될 수 있습니다. 반드시 라이브러리로 서명과 alg 를 검증하세요.

운영 토큰을 아무 데나 붙여 넣는다

살아 있는 액세스 토큰은 그 자체로 로그인 권한입니다. 공유 문서나 메신저에 붙이지 말고, 어디에 붙이든 먼저 이미 만료됐거나 폐기해도 되는 토큰인지 생각하세요.

exp 를 밀리초로 넣는다

JWT 의 exp·iat·nbf 는 Unix 초 단위입니다. 밀리초 값을 넣으면 먼 미래 시각이 돼 토큰이 사실상 만료되지 않습니다.

자주 묻는 질문

JWT 토큰 디코딩 방법은?

JWT 칸에 토큰을 붙여 넣고 디코드를 누르면 됩니다. 헤더와 페이로드가 JSON 으로, 시간 클레임은 읽을 수 있는 시각으로 나옵니다.

JWT 서명 검증도 되나요?

지원하지 않습니다. 비밀키나 공개키를 입력받지 않으며, 서명 검증은 서버 코드에서 검증 라이브러리로 하세요.

JWT 는 암호화된 건가요?

일반적인 JWT(JWS)는 서명만 됐을 뿐 암호화되지 않아 누구나 내용을 읽을 수 있습니다. 내용까지 숨기는 JWE 는 다섯 부분으로 돼 있으며 이 도구로는 디코드되지 않습니다.

JWT 만료 시간은 어떻게 확인하나요?

페이로드의 exp 값이 만료 시각입니다. 이 도구는 exp 를 로컬 시각과 UTC 로 바꿔 보여 주고 현재 시각과 비교해 만료 배지를 붙입니다.

'디코드 실패'가 나와요

점으로 나눈 부분이 세 개가 아니거나, 헤더·페이로드가 올바른 base64url JSON 이 아닐 때입니다. 앞의 Bearer 나 감싼 따옴표가 함께 들어가지 않았는지 확인하세요.

입력한 데이터는 어디에서 처리하나요?

이 도구의 입력 데이터는 브라우저에서 처리하며 도구 기능을 위해 서버로 업로드하지 않습니다. 결과를 공유하기 전 민감한 정보가 없는지 확인하세요.

함께 쓰면 좋은 도구

전체 도구 바로가기

손으로 익히기

문서 · 데이터 변환

개발 실무

한국 개발 특화

API · 네트워크

이미지 · 색상