JWT 디코더
JWT를 붙여넣으면 헤더와 페이로드를 풀어서 보여줘요. 만료 시각을 확인하고, HS256 계열은 비밀키로 서명도 검증할 수 있어요.
디코딩은 검증이 아니에요. 헤더와 페이로드는 누구나 읽을 수 있고 누구나 바꿔 쓸 수 있는 값이에요. 아래 서명 검증을 통과하기 전까지는 내용을 믿으면 안 돼요.
클레임
| 클레임 | 값 | 의미 |
|---|
서명 검증
사용 방법
- 토큰을 붙여넣으세요. 앞에 Bearer가 붙어 있거나 줄바꿈이 섞여 있어도 읽어요. 사용해 보려면 샘플 버튼을 누르세요.
- 헤더와 페이로드, 그리고 exp·nbf·iat 시각과 만료 여부를 확인하세요. 시각은 한국 시간(KST)과 UTC로 함께 보여줘요.
- HS256, HS384, HS512 토큰이면 비밀키를 넣어서 서명이 맞는지 확인하세요. 비밀키가 base64로 인코딩된 값이면 체크박스를 켜세요.
- 알고리즘이 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 샘플은 서명 없이 만들어 경고가 어떻게 나오는지 보여줘요.
실제 서비스의 토큰을 붙여넣어도 되나요?
입력한 값은 서버로 전송되지 않고 이 브라우저 안에서만 처리돼요. 그래도 아직 유효한 운영 환경의 토큰은 다른 사람이 볼 수 있는 곳(화면 공유, 스크린샷 등)에 노출되지 않게 조심하고, 가능하면 테스트용 토큰을 쓰세요.