개발 도구

JWT 풀어 보기

JWT의 헤더·내용·만료 시각을 풀어 보고 서명을 검증합니다. 토큰은 밖으로 나가지 않습니다.

🔒 입력한 내용과 파일은 이 브라우저 안에서만 처리합니다. 서버로 보내지 않습니다.

JWT 풀어 보기 사용법

JWT(JSON Web Token)는 로그인한 사용자가 누구인지, 무엇을 할 수 있는지를 담아 서버와 주고받는 토큰입니다. eyJ 로 시작하는 긴 글자열이고 API 요청의 Authorization 헤더에 Bearer 뒤에 붙어 다닙니다. 로그인이 자꾸 풀리거나 403 오류가 날 때 토큰 안에 무엇이 들어 있고 언제 만료되는지 확인하면 원인을 빨리 찾을 수 있습니다. 이 도구는 토큰을 풀어 헤더와 내용을 보여 주고 서명이 맞는지 검증합니다.

쓰는 순서

  1. 입력 칸에 토큰을 붙여 넣습니다. 앞에 Bearer 가 붙어 있거나 앞뒤에 다른 글이 있어도 토큰만 골라냅니다.
  2. 맨 위 줄에서 상태를 봅니다. 유효 기간 안인지, 만료됐는지, 얼마나 남았는지 나옵니다.
  3. 헤더와 내용이 들여쓰기된 JSON으로 나옵니다. 각각 복사 버튼이 있습니다.
  4. 아래 표에서 항목별 뜻을 확인합니다. exp, iat, nbf 같은 시각은 한국 시간으로 바꿔 보여 줍니다.
  5. 서명까지 확인하려면 서명 검증 칸에 키를 넣습니다.

처음이라면 예시 토큰 만들어 넣기를 눌러 보세요. 지금 시각에 발급되어 1시간 뒤 만료되는 HS256 토큰을 만들어 넣고, 비밀 키 칸에 toolmoa-secret 을 채워 "서명이 일치합니다"까지 보여 줍니다. 비밀 키를 한 글자 바꾸면 일치하지 않는다고 바뀝니다.

JWT의 구조

JWT는 점(.)으로 나뉜 세 부분입니다. 널리 알려진 시험용 토큰으로 살펴보면 다음과 같습니다.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

부분풀면 나오는 것
헤더{"alg":"HS256","typ":"JWT"} 서명에 쓴 알고리즘
내용{"sub":"1234567890","name":"John Doe","iat":1516239022} 사용자와 시각 정보
서명헤더와 내용을 키로 서명한 값. 내용이 바뀌면 맞지 않게 됩니다

이 토큰을 붙여 넣으면 iat 1516239022 가 2018-01-18 10:30:22 (한국 시간)로 나오고, exp가 없으므로 상태는 "만료 시각(exp) 없음"입니다. 비밀 키 칸에 your-256-bit-secret 을 넣으면 서명이 일치합니다. 헤더와 내용은 Base64URL로 적었을 뿐 암호화한 것이 아니라서 키가 없어도 누구나 읽을 수 있다는 점을 꼭 기억하세요.

서명 검증

알고리즘은 헤더의 alg 값을 따릅니다. 종류에 따라 넣는 키가 다릅니다.

alg넣을 키설명
HS256, HS384, HS512비밀 키발급하는 쪽과 검증하는 쪽이 같은 키를 나눠 갖는 방식. 키가 Base64로 적힌 값이라면 체크 상자를 켭니다.
RS256, RS384, RS512, PS256, PS384, PS512RSA 공개 키 (PEM)개인 키로 서명하고 공개 키로 검증하는 방식. 구글, 카카오 같은 로그인 제공자가 씁니다.
ES256, ES384, ES512EC 공개 키 (PEM)타원곡선 서명. 애플 로그인 등이 씁니다.

공개 키는 -----BEGIN PUBLIC KEY----- 로 시작하는 형식만 읽습니다. 인증서(CERTIFICATE)나 BEGIN RSA PUBLIC KEY 형식, JWKS의 JSON 키는 먼저 이 형식으로 바꿔야 합니다. 개인 키는 검증에 필요하지 않으니 넣지 마세요. 서명이 일치한다는 것은 "이 키를 가진 쪽이 발급했고 내용이 그대로"라는 뜻이며, 만료 여부는 맨 위 상태 줄에서 따로 확인해야 합니다.

여러 토큰 한 번에 보기

입력 칸에 토큰을 두 개 이상 넣으면(줄을 바꾸거나 로그를 통째로 붙여도 됩니다) 토큰마다 alg, sub, 만료 시각, 상태를 한 줄씩 보여 주는 요약 표가 나옵니다. 액세스 토큰과 리프레시 토큰을 나란히 놓고 만료 시각을 비교하거나, 로그에 찍힌 토큰 가운데 어느 것이 만료됐는지 찾을 때 씁니다. 줄의 자세히를 누르면 그 토큰의 헤더와 내용이 아래에 나오고, 요약 표는 CSV로 저장할 수 있습니다.

오류가 날 때

  • 세 부분이 아님: 복사하다 뒤가 잘렸거나 줄바꿈이 끼어든 경우가 많습니다. 다섯 부분이면 내용까지 암호화한 JWE라서 키 없이는 풀 수 없다고 알려 드립니다.
  • Base64URL이 아님, JSON이 아님: JWT가 아닌 다른 종류의 토큰(무작위 문자열로 된 세션 토큰 등)일 수 있습니다.
  • 시각이 이상함: exp가 밀리초(13자리)로 들어간 토큰은 수만 년 뒤로 계산됩니다. 발급하는 쪽의 버그이니 초 단위로 고쳐야 합니다.

주의할 점

  • 유효한 토큰은 비밀번호와 같습니다. 이 도구는 토큰을 서버로 보내지 않지만, 화면 공유나 캡처로 새어 나가지 않게 조심하세요.
  • 만료 판단은 이 기기의 시계를 기준으로 합니다. 서버는 보통 몇 초에서 몇 분의 오차를 허용하므로 만료 직전·직후의 판단은 서버와 다를 수 있습니다.
  • 이 도구는 토큰을 새로 만들거나 고쳐서 다시 서명하는 기능은 넣지 않았습니다. 예시 토큰만 만들어 보여 줍니다.

자주 묻는 질문

JWT의 내용은 암호화되어 있나요?

아닙니다. 흔히 쓰는 JWT(JWS)는 헤더와 내용을 Base64URL로 적었을 뿐이라 토큰을 가진 사람은 누구나 내용을 읽을 수 있습니다. 서명은 내용이 바뀌지 않았음을 보증할 뿐 숨겨 주지 않으므로 비밀번호나 주민등록번호 같은 정보를 넣으면 안 됩니다.

실제 서비스의 토큰을 붙여 넣어도 안전한가요?

이 도구는 토큰을 이 브라우저 안에서만 풀고 어디로도 전송하지 않습니다. 그래도 유효한 토큰은 비밀번호와 같으므로, 화면을 공유하거나 캡처할 때 토큰이 보이지 않게 주의하고 가능하면 만료된 토큰이나 시험용 토큰으로 확인하세요.

서명 검증에서 일치하지 않는다고 나옵니다.

비밀 키가 다르거나, 키가 Base64로 적힌 값인데 글자 그대로 넣었거나, 토큰이 복사 중에 잘렸거나, 내용이 바뀐 경우입니다. RS256과 ES256은 비밀 키가 아니라 공개 키(PEM)를 넣어야 합니다.

exp, iat, nbf는 무엇인가요?

모두 유닉스 시간(초)으로 적힌 시각입니다. exp는 만료 시각, iat는 발급 시각, nbf는 이 시각 전에는 쓸 수 없다는 뜻입니다. 이 도구는 세 값을 한국 시간으로 바꿔 보여 주고 만료까지 남은 시간이나 지난 시간을 알려 줍니다.

alg가 none인 토큰은 무엇인가요?

서명이 없는 토큰입니다. 누구나 내용을 바꿔 만들 수 있으므로 서버가 이런 토큰을 받아들이면 심각한 보안 문제가 됩니다. 이 도구는 alg가 none이면 경고를 보여 줍니다.

함께 쓰면 좋은 도구

마지막 수정 2026-11-09. 있었으면 하는 기능이나 불편한 점은 이 도구에 건의하기로 알려 주세요.