JWT 디코더

JWT를 붙여넣으면 헤더와 페이로드를 풀어서 보여줘요. 만료 시각을 확인하고, HS256 계열은 비밀키로 서명도 검증할 수 있어요.

디코딩은 검증이 아니에요. 헤더와 페이로드는 누구나 읽을 수 있고 누구나 바꿔 쓸 수 있는 값이에요. 아래 서명 검증을 통과하기 전까지는 내용을 믿으면 안 돼요.

사용 방법

  1. 토큰을 붙여넣으세요. 앞에 Bearer가 붙어 있거나 줄바꿈이 섞여 있어도 읽어요. 사용해 보려면 샘플 버튼을 누르세요.
  2. 헤더와 페이로드, 그리고 exp·nbf·iat 시각과 만료 여부를 확인하세요. 시각은 한국 시간(KST)과 UTC로 함께 보여줘요.
  3. HS256, HS384, HS512 토큰이면 비밀키를 넣어서 서명이 맞는지 확인하세요. 비밀키가 base64로 인코딩된 값이면 체크박스를 켜세요.
  4. 알고리즘이 none이면 경고가 나와요. RS256 같은 공개키 방식은 서명 검증을 지원하지 않아요.

자주 묻는 질문

JWT는 어떻게 생겼나요?

점(.)으로 나뉜 세 부분(헤더.페이로드.서명)이고, 앞의 두 부분은 JSON을 Base64URL로 인코딩한 값이에요. 이 도구는 이 세 부분짜리(JWS) 토큰을 지원해요. 암호화된 JWE 토큰은 다섯 부분이고 이 도구에서는 풀지 않아요.

디코딩만 해도 안전한가요?

디코딩은 단순히 Base64URL을 푸는 일이라 비밀키가 없어도 누구나 할 수 있어요. 값이 위조됐는지는 서명을 검증해야만 알 수 있어요. 서버에서는 반드시 서명 검증을 거친 뒤에 페이로드를 사용해야 해요.

alg가 none이면 왜 위험한가요?

none은 서명이 없다는 뜻이라 누구나 원하는 내용으로 토큰을 만들 수 있어요. 서버가 토큰 헤더의 alg를 그대로 믿고 none을 허용하면 위조된 토큰이 통과할 수 있어서, 서버에서는 허용할 알고리즘을 미리 정해 두는 것이 안전해요.

만료 여부는 어떻게 판단하나요?

지금 시각이 exp 값 이상이면 만료로 봐요(RFC 7519). nbf가 있으면 그 시각 전에는 아직 유효하지 않다고 표시해요. 이 도구는 기기 시계를 기준으로 하고 시계 오차 허용(leeway)은 두지 않아요. exp가 없으면 만료되지 않는 토큰이라고 알려줘요.

샘플은 어떻게 만들어지나요?

HS256 샘플은 비밀키 dev-tree-secret으로 이 브라우저에서 직접 서명해서 만들어요. 서버로 요청을 보내지 않아요. 만료된 샘플은 한 시간 전에 만료된 값이고, alg none 샘플은 서명 없이 만들어 경고가 어떻게 나오는지 보여줘요.

실제 서비스의 토큰을 붙여넣어도 되나요?

입력한 값은 서버로 전송되지 않고 이 브라우저 안에서만 처리돼요. 그래도 아직 유효한 운영 환경의 토큰은 다른 사람이 볼 수 있는 곳(화면 공유, 스크린샷 등)에 노출되지 않게 조심하고, 가능하면 테스트용 토큰을 쓰세요.

다른 도구