JWT Decoder로 JSON Web Token 읽기
이 디코더가 하는 일
JSON Web Token은 마침표로 이어진 세 개의 Base64URL 인코딩 부분, 즉 header, payload, signature로 이루어집니다. 이 디코더는 문자열을 그 마침표 기준으로 나누어 header와 payload를 읽을 수 있는 JSON으로 복원하고, signature 부분은 그대로 보여 줍니다. header의 alg 필드를 읽어 표준 등록 클레임(sub, iss, aud, jti)과 시간 관련 클레임을 함께 표시하므로, 그 토큰이 무엇을 주장하는지 한눈에 확인할 수 있습니다.
토큰을 붙여 넣는 순간 디코딩이 실행되어 별도의 전송 단계가 없습니다. 디코딩된 구조가 어떻게 생겼는지 그냥 살펴보고 싶다면 샘플 토큰도 준비되어 있습니다.
언제 쓰나요
인증이 걸린 요청이 예상과 다르게 동작해서 토큰이 실제로 무엇을 담고 있는지 봐야 할 때 유용합니다. 흔한 경우가 원인을 알 수 없는 401입니다. 토큰을 붙여 넣으면 상태 표시가 만료되었는지, 아직 유효해지지 않았는지, 아니면 유효 기간 안에 있는지를 즉시 알려 줍니다.
로그인 흐름을 구성할 때도 편리해서, issuer, audience, subject가 백엔드가 기대하는 값과 일치하는지 확인하거나, 서버에서 추가한 커스텀 클레임이 실제로 payload에 담겼는지 점검할 수 있습니다.
예시: 세 부분 읽기
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.SflKx... 형태의 토큰이라면, 첫 번째 세그먼트는 {"alg":"HS256","typ":"JWT"} 같은 header로, 두 번째는 {"sub":"1234","iat":1700000000,"exp":1700003600} 같은 payload로 디코딩되고, 세 번째는 불투명한 signature로 남습니다. 디코더는 숫자 값 iat와 exp를 로컬 시간의 날짜로 변환하고, 토큰이 아직 유효하면 만료까지 남은 시간도 보여 줍니다.
참고 사항과 엣지 케이스
디코딩은 검증이 아닙니다. 이 도구는 signature를 비밀 키나 공개 키와 대조하지 않으므로, 디코딩된 토큰은 그것이 무엇을 주장하는지만 보여 줄 뿐 그 주장이 신뢰할 만한지는 보장하지 않습니다. 토큰을 근거로 무언가를 처리하기 전에는 반드시 서버 측에서 적절한 라이브러리로 signature를 검증하세요. payload는 단지 Base64URL로 인코딩되어 있을 뿐이므로, 그 내용은 토큰을 가진 사람이라면 누구나 읽을 수 있는 것으로 취급해야 합니다. 암호화된 것이 아닙니다. 같은 이유로 본인이 관리하지 않는 실제 운영 토큰을 붙여 넣는 일은 피하고, exp와 nbf가 초 단위 Unix 타임스탬프라는 점을 기억하세요. 그래서 exp가 지나는 바로 그 순간 토큰이 만료로 표시됩니다.