잰드케이

JWT 디코더 (서버 전송 없음)

JWT 토큰을 붙여넣으면 헤더와 페이로드를 바로 풀어 보여주고, exp·iat 같은 시각은 한국 시간(KST)으로 변환합니다. 토큰은 브라우저 밖으로 나가지 않습니다.

토큰 붙여넣기

입력값은 브라우저 밖으로 나가지 않습니다. 모든 계산은 이 페이지 안에서 처리되며, 서버로 전송하거나 저장하지 않습니다.

JWT가 뭔가요?

JSON Web Token의 줄임말로, 로그인한 사용자가 누구인지를 담아 서버와 주고받는 문자열입니다. 점(.)으로 나뉜 세 덩어리로 되어 있습니다.

헤더(header)는 어떤 알고리즘으로 서명했는지, 페이로드(payload)는 실제 내용(사용자 ID·권한·만료 시각), 서명(signature)은 이 토큰이 위조되지 않았음을 증명하는 부분입니다.

앞의 두 덩어리는 Base64URL로 인코딩돼 있을 뿐이라 누구나 되돌려 읽을 수 있습니다. 위 도구가 하는 일이 정확히 그것입니다.

JWT에 비밀번호 같은 걸 넣어도 되나요?

절대 안 됩니다. 가장 흔한 오해가 여기에 있습니다.

페이로드는 암호화가 아니라 인코딩입니다. 암호화는 열쇠가 있어야 풀리지만, 인코딩은 그냥 형식을 바꾼 것이라 아무나 되돌립니다. 위 도구에 토큰을 붙여넣으면 시크릿 키 없이도 내용이 전부 보이는 게 그 증거입니다.

서명은 "내용이 바뀌지 않았음"을 보장할 뿐, "내용을 감춰주지" 않습니다. 비밀번호·주민번호·카드번호는 물론이고, 유출되면 곤란한 내부 식별자도 페이로드에 넣으면 안 됩니다.

서명 검증은 왜 안 해주나요?

검증하려면 시크릿 키가 필요한데, 그걸 웹페이지에 붙여넣게 만드는 것 자체가 위험하기 때문입니다.

시크릿 키는 토큰보다 훨씬 민감합니다. 그게 있으면 누구든 원하는 내용의 토큰을 만들어낼 수 있습니다. "검증해드립니다"라며 키를 받아가는 온라인 도구는, 그 키를 서버로 보내지 않는다는 걸 사용자가 확인할 방법이 없습니다.

이 도구는 서버가 아예 없습니다. 정적 파일만 올라가 있어서 값을 받아갈 곳이 존재하지 않습니다. 대신 검증도 못 합니다 — 그건 서버 쪽 코드가 할 일이라고 봅니다.

exp, iat, nbf는 무슨 뜻인가요?

JWT 표준(RFC 7519)이 정한 등록된 클레임(registered claims)입니다. 이름이 짧은 건 토큰 크기를 줄이기 위해서입니다.

exp(expiration)는 만료 시각, iat(issued at)는 발급 시각, nbf(not before)는 이 시각 전에는 쓰면 안 된다는 뜻입니다. 그 밖에 iss(발급자), sub(주체, 보통 사용자 ID), aud(대상), jti(토큰 고유 ID)가 있습니다.

이 시각들은 전부 Unix 타임스탬프(초)입니다. 그래서 눈으로는 몇 시인지 알 수 없습니다. 위 도구가 한국 시간으로 바꿔서 같이 보여주고, 더 자세히 보고 싶으면 Unix 타임스탬프 변환기로 넘어갈 수 있습니다.