JWT 디코딩: 헤더와 페이로드, 만료 시간 확인
이 JWT 디코더는 JSON 웹 토큰을 헤더와 페이로드로 나누고, 붙여넣는 즉시 들여쓰기된 JSON으로 보여줘요. exp 같은 시간 클레임에는 읽기 쉬운 현지 날짜를 옆에 붙이고, 토큰이 만료됐는지는 배지로 알려줘요. 서명 검증은 선택 사항이에요. 토큰은 브라우저 안에서만 읽고 업로드하지 않아요.
JWT 토큰 확인: 이렇게 디코딩해요
- 토큰을 JSON 웹 토큰 입력란에 붙여넣으세요. 헤더와 페이로드가 바로 나타나요. 디코딩 버튼은 따로 없어요.
- 결과 위의 상태 배지를 확인하세요. 토큰이 만료됐는지, 아직 유효하지 않은지, 만료가 없는지와 서명 상태를 알려줘요.
- 헤더 복사 또는 페이로드 복사를 선택하면 그 블록을 일반 JSON으로 복사해요. 날짜 메모는 복사본에 들어가지 않아요.
- 지우기를 선택하면 입력란이 비워져서 다른 토큰으로 시작할 수 있어요.
토큰은 받은 그대로 붙여넣어도 돼요. 맨 앞의 Authorization: Bearer, 앞뒤 따옴표, 줄바꿈은 자동으로 지워지니까 요청 헤더, 로그 한 줄, JSON 응답에서 그대로 복사해도 돼요. 입력란은 최대 100,000자까지 받아요. 클레임 안의 큰 숫자나 한글 같은 문자도 그대로 정확하게 보여주고, 긴 값은 줄이 바뀌어 표시돼요.
JWT 헤더와 페이로드에 든 내용
JWT는 점으로 이어진 base64url 세 부분(header.payload.signature)으로 이루어져요. 앞의 두 부분은 인코딩만 된 JSON이라서, JWT 디코드는 비밀 키 없이도 돼요. 자주 보는 클레임은 다음과 같아요.
iss: 발급자, 토큰을 만든 쪽sub: 주체, 토큰이 누구에 관한 것인지aud: 대상, 토큰을 받는 쪽exp: 만료 시간nbf: 이 시간 전에는 유효하지 않음iat: 발급 시간jti: 토큰 고유 ID
헤더에는 보통 alg(서명 알고리즘)와 typ가 들어 있고, 서명한 키의 ID인 kid가 들어 있을 때도 있어요.
JWT 만료 시간 확인
exp, iat, nbf, auth_time은 초 단위 Unix 타임스탬프예요. 이 도구는 숫자 옆에 현지 날짜와 시간을 적어 주니까 따로 변환하지 않아도 돼요. 결과 위의 배지는 내 기기의 시계를 기준으로 해요.
exp클레임을 보고 만료된 지 얼마나 됐는지, 또는 만료까지 얼마나 남았는지 보여줘요.exp가 없으면 만료 없음: 이 토큰에는 exp 클레임이 없어요라고 표시해요.nbf가 아직 미래라면 아직 유효하지 않은 토큰으로 표시해요.
JWT 서명 검증
디코딩은 토큰에 무엇이 적혀 있는지만 보여줘요. 토큰이 바뀌지 않았다는 것은 서명으로만 확인할 수 있어요. 결과 아래에 서명 검증하기 (선택)가 있어요. 알고리즘은 토큰의 alg를 읽는 자동 감지로 두거나 직접 고르세요. HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, EdDSA 중에서 고를 수 있어요. 그다음 시크릿 또는 공개 키 입력란에 키를 붙여넣으세요.
- HS 알고리즘에는 일반 시크릿. 입력한 그대로 쓰이고, 먼저 base64로 디코딩되지는 않아요.
- PEM 공개 키(
-----BEGIN PUBLIC KEY-----) 또는 PKCS#1 형식의 RSA 공개 키 - X.509 인증서
- JWK 또는 JWKS 전체. 이 경우 토큰의
kid에 맞는 키가 골라져요.
배지는 서명이 유효해요 또는 서명이 유효하지 않아요로 바뀌어요. 키가 없으면 서명을 검증하지 않았어요로 남아요. alg가 none인 토큰에는 서명 없음: 서명되지 않은 토큰이에요가 표시돼요. 개인 키를 붙여넣으면 도구가 받아들이지 않고 공개 키를 요청해요. 검증에는 공개 키만 있으면 돼요. 확인에는 브라우저 자체의 WebCrypto를 쓰고, EdDSA는 최신 브라우저가 필요해요.
JWT 토큰 해석이 안 될 때
오류는 입력란 아래에 나타나고 문제가 있는 부분을 알려줘요.
- 텍스트가 점 두 개로 나뉜 세 부분이 아니에요. 메시지에 찾은 부분의 수가 나와요.
- 헤더, 페이로드, 서명 중 하나가 올바른 base64url이 아니에요. 복사하다가 문자가 빠진 경우가 많아요.
- 헤더나 페이로드가 올바른 UTF-8 텍스트가 아니거나 올바른 JSON이 아니에요.
- 다섯 부분으로 된 토큰은 암호화된 JWE예요. 알아보고 설명은 해 주지만, 개인 키 없이는 읽을 수 없어요.
토큰을 여기에 붙여넣어도 안전한가요?
토큰과 키는 모두 내 기기에서 디코딩하고 확인해요. 업로드하거나 저장하지 않고, 계정도 필요 없어요. 그래도 사용 중인 액세스 토큰은 인증 정보예요. 가능하면 만료된 토큰이나 테스트용 토큰을 쓰세요.
이 도구는 토큰을 읽고 확인하기만 해요. JWT를 만들거나 서명하지 못하고, JWE를 복호화하지도 못해요.
자주 묻는 질문
시크릿 없이 JWT를 디코딩할 수 있나요?
네, 할 수 있어요. JWT의 헤더와 페이로드는 base64url로 인코딩만 되어 있고 암호화되어 있지 않아서, 토큰이 있으면 누구나 읽을 수 있어요. 'JSON 웹 토큰' 입력란에 붙여넣으면 둘 다 바로 나와요. 시크릿이나 공개 키는 서명을 확인할 때만 필요하고, 여기서는 선택 사항이에요.
JWT 만료 확인은 어떻게 하나요?
토큰을 붙여넣고 결과 위의 배지를 보세요. exp 클레임을 바탕으로 만료된 지 얼마나 됐는지, 또는 남은 시간이 표시돼요. exp가 없는 토큰에는 '만료 없음: 이 토큰에는 exp 클레임이 없어요'가 나오고, nbf가 아직 미래라면 아직 유효하지 않다고 표시돼요.
JWT의 exp 값을 날짜로 바꾸려면 어떻게 하나요?
바꿀 필요가 없어요. exp는 초 단위 Unix 타임스탬프이고, 이 도구가 '페이로드' 블록의 숫자 옆에 해당하는 현지 날짜와 시간을 적어 줘요. iat, nbf, auth_time도 똑같이 표시돼요.
공개 키로 JWT 서명을 검증하려면 어떻게 하나요?
'서명 검증하기 (선택)'에서 '알고리즘'을 자동 감지로 두거나 토큰이 쓰는 것을 고르고, '시크릿 또는 공개 키'에 공개 키를 붙여넣으세요. PEM 키(-----BEGIN PUBLIC KEY-----), RSA PUBLIC KEY, X.509 인증서, JWK, JWKS 모두 쓸 수 있어요. 그러면 배지가 '서명이 유효해요' 또는 '서명이 유효하지 않아요'로 바뀌어요.
JWT 디코딩 사이트에 토큰을 붙여넣어도 서버로 전송되지 않나요?
이 도구는 전송하지 않아요. 토큰을 나누고 디코딩하고 확인하는 일이 모두 브라우저 안에서 이루어지고, 업로드하거나 저장하지 않아요. 서명 확인에는 브라우저 자체의 WebCrypto를 쓰기 때문에 토큰도 키도 어디로도 전송되지 않아요.
JWT 헤더와 페이로드에는 무엇이 들어 있나요?
헤더는 토큰을 설명하는 부분이고, 보통 서명 알고리즘(alg), 종류(typ), 가끔 키 ID(kid)가 들어 있어요. 페이로드에는 누가 발급했는지(iss), 누구에 관한 것인지(sub), 누구를 위한 것인지(aud), 언제 만료되는지(exp) 같은 클레임이 들어 있어요. 둘 다 일반 JSON이고 '헤더'와 '페이로드' 블록에 표시돼요.
JWT에서 alg none은 무슨 뜻인가요?
토큰이 스스로 서명되지 않았다고 선언한 거예요. 서명 부분이 비어 있어서 확인할 것이 없어요. 도구는 '서명 없음: 서명되지 않은 토큰이에요'라고 표시해요. 서버는 이런 토큰을 신원 증명으로 받아들이면 안 돼요.
bearer 토큰 디코딩은 어떻게 하나요?
JWT라면 그대로 붙여넣으세요. 맨 앞의 Authorization: Bearer, 따옴표, 줄바꿈은 자동으로 지워져서 요청 헤더나 로그에서 바로 복사해도 돼요. 점으로 나뉜 세 부분이 아닌 불투명한 bearer 토큰은 디코딩할 수 없고, 도구가 찾은 부분의 수를 알려줘요.
암호화된 JWE를 풀거나 JWT를 만들고 서명할 수 있나요?
아니요. 다섯 부분으로 된 토큰은 JWE이고 내용이 암호화되어 있어서 개인 키 없이는 읽을 수 없어요. 도구는 오류를 띄우는 대신 JWE라고 알려줘요. 토큰을 만들거나 서명하거나 수정하지도 못하고, 읽고 확인하기만 해요.