JWT 디코더(내용・만료 시간・서명 확인)
JWT를 붙여넣기만 하면 헤더와 페이로드를 읽고, 만료 시간을 날짜와 시간으로 보여 줍니다. 키를 넣으면 서명도 확인합니다.
JWT
0자・0줄
처리는 이 기기 안에서 이루어지며, 입력한 내용은 어디에도 전송되지 않습니다.
JWT는 로그인 열쇠와 같은 역할을 할 수 있습니다. 믿을 수 없는 다른 사이트에는 붙여넣지 마세요.
읽은 내용
여기에 결과가 나옵니다
도움이 되었다면 공유해 주세요
잘 작동하지 않거나 ‘이랬으면 좋겠다’ 싶은 점이 있다면
사용 방법
1. JWT 붙여넣기
위 입력란의 「붙여넣기」를 탭하면 복사해 둔 JWT가 들어갑니다. 「Bearer」가 붙어 있거나 앞뒤에 따옴표가 있어도 그대로 괜찮습니다. 시험만 해 보려면 「예시」를 탭합니다.
왼쪽 입력란 위의 「붙여넣기」를 누르면 복사해 둔 JWT가 들어갑니다. 「Bearer」가 붙어 있거나 앞뒤에 따옴표가 있어도 그대로 괜찮습니다. 시험만 해 보려면 「예시 넣기」를 누릅니다.
2. 내용 보기
아래 「읽은 내용」에 「유효」「만료됨」 같은 표시가 나오고, 그 아래에 만료 시간과 발급 시간이 이 기기의 시간과 「◯년 후」「◯시간 전」으로 나옵니다. 그 아래에 헤더와 페이로드의 JSON이 나오므로, 「페이로드 복사」를 탭하면 정리된 JSON을 복사합니다.
오른쪽 결과란 위에 「유효」「만료됨」 같은 표시가 나오고, 그 아래에 만료 시간과 발급 시간이 이 기기의 시간과 「◯년 후」「◯시간 전」으로 나옵니다. 그 아래에 헤더와 페이로드의 JSON이 나오므로, 「페이로드 복사」를 누르면 정리된 JSON을 복사합니다.
3. 서명 확인하기
맨 아래의 「서명 확인하기」 칸에, HS256 등이라면 비밀 키를, RS256・ES256 등이라면 공개 키를 넣습니다. 넣으면 바로 「서명이 올바릅니다」 또는 「서명이 맞지 않습니다」가 나옵니다. 예시 토큰의 키는 papatto-sample-secret입니다.
왼쪽 아래의 「서명 확인하기」 칸에, HS256 등이라면 비밀 키를, RS256・ES256 등이라면 공개 키를 넣습니다. 넣으면 바로 「서명이 올바릅니다」 또는 「서명이 맞지 않습니다」가 나옵니다. 예시 토큰의 키는 papatto-sample-secret입니다.
이럴 때 추천
로그인이 갑자기 풀리는 이유를 알고 싶을 때
토큰을 붙여넣으면 만료 시간(exp)과 발급 시간(iat)을 이 기기의 시간과 「◯분 전」으로 보여 줍니다. 만료됐다면 표시로 바로 알 수 있어, 시계가 어긋났거나 유효 기간이 너무 짧은 것도 찾기 쉽습니다.
웹 개발자・고객 지원 담당자
토큰에 무엇이 들어 있는지 확인하고 싶을 때
사용자(sub)・발급자(iss)・대상(aud)이나 권한 같은 사용자 정의 클레임을 정리된 JSON으로 읽을 수 있습니다. 개발자 도구에서 복사한 「Bearer」가 붙은 문자열도 그대로 붙여넣을 수 있습니다.
API를 만들거나 시험하는 사람
서명 키가 맞는지 확인하고 싶을 때
HS256의 비밀 키나 RS256・ES256의 공개 키(PEM・JWK)를 넣으면, 그 키로 만든 서명인지 바로 확인합니다. 키 설정이 달라서 인증이 통과되지 않을 때 원인을 좁히는 데 쓸 수 있습니다.
인증 기능을 만드는 개발자
실제 토큰을 밖으로 내보내고 싶지 않을 때
읽는 것도 확인하는 것도 모두 이 기기의 브라우저 안에서 이루어집니다. 토큰이나 키가 서버로 보내지지 않으므로, 다른 사람의 서버에 인증 정보를 넘기지 않아도 됩니다.
보안에 신경 쓰는 사람
사용하기 전에 알아 둘 점
- JWT의 내용은 암호가 아니어서 누구나 읽을 수 있습니다. 비밀번호 등 보여서는 안 되는 정보는 넣지 마세요.
- 암호화된 JWT(JWE)는 내용을 읽을 수 없습니다. 읽을 수 있는 것은 헤더뿐입니다.
- 공개 키를 자동으로 가져오는 기능(JWKS URL에서 읽기)은 없습니다. 키는 직접 붙여넣어 주세요(이 페이지는 외부와 통신하지 않기 때문입니다).
JWT에 대해
JWT(JSON Web Token)는 로그인한 사람의 정보나 권한을 「헤더.페이로드.서명」의 세 부분으로 나타낸 문자열입니다. 헤더와 페이로드는 JSON을 {tool:base64}의 URL 안전 형식으로 바꾸었을 뿐이므로 누구나 되돌려 읽을 수 있습니다. 위조를 막는 것은 마지막의 서명입니다.
이 도구는 페이로드의 exp(만료 시간)・nbf(사용 시작 시간)・iat(발급 시간)를 이 기기의 시간대 기준 날짜・시간과 「◯시간 후」 같은 말로 보여 주고, 만료됐다면 표시로 알려 줍니다. 숫자로만 된 시간은 {tool:unix-time}에서도 변환할 수 있습니다. 키를 넣으면 HS256・RS256・PS256・ES256・EdDSA 등의 서명이 올바른지도 브라우저 안에서만 확인합니다.
자주 묻는 질문
사용하기 전에 궁금해하기 쉬운 점을 모았습니다.
붙여넣은 JWT가 어딘가로 전송되나요?
전송되지 않습니다. 읽는 것도 서명을 확인하는 것도 사용 중인 기기의 브라우저 안에서만 이루어지며, JWT도 키도 서버로 보내지 않습니다. JWT는 로그인 열쇠와 같은 역할을 할 수 있으므로, 어떤 곳인지 모르는 다른 사이트에는 붙여넣지 않도록 해 주세요.
만료 시간(exp)은 어떻게 보면 되나요?
「읽은 내용」 위의 표시로 「유효」「만료됨」「아직 사용 전」「만료 없음」을 알 수 있습니다. 아래 목록에는 만료 시간을 이 기기의 시간대로 보여 주고, 「3시간 후」「2일 전」처럼 지금부터의 시간도 함께 적습니다.
서명도 확인할 수 있나요?
확인할 수 있습니다. HS256・HS384・HS512는 비밀 키(문자 또는 Base64)를, RS256・PS256・ES256・EdDSA 등은 공개 키를 넣으면 바로 「서명이 올바릅니다」 또는 「서명이 맞지 않습니다」가 나옵니다.
어떤 형식의 공개 키를 쓸 수 있나요?
「-----BEGIN PUBLIC KEY-----」로 시작하는 PEM, 「-----BEGIN RSA PUBLIC KEY-----」, 인증서(-----BEGIN CERTIFICATE-----), JWK, JWK Set({"keys": […]})을 읽을 수 있습니다. JWK Set일 때는 헤더의 kid와 같은 키를 고릅니다.
「Bearer」가 붙은 채로도 읽을 수 있나요?
읽을 수 있습니다. 「Authorization: Bearer」가 붙은 줄이나 앞뒤의 공백・줄바꿈・따옴표는 자동으로 떼어 낸 뒤 읽습니다.
「서명이 없는 JWT입니다(alg: none)」라고 나왔습니다
서명이 없어 누구나 내용을 바꿀 수 있는 토큰입니다. 테스트용이 아니라면 서버 설정을 다시 확인해 주세요. 로그인 등에 쓰는 서버는 alg가 none인 JWT를 받아들이면 안 됩니다.
「암호화된 JWT(JWE)입니다」라고 나왔습니다
「.」으로 5개로 나뉜 JWT는 내용을 암호화한 JWE입니다. 받는 쪽의 개인 키가 없으면 읽을 수 없기 때문에, 이 도구에서는 헤더(암호화 방식 등)만 보여 줍니다.
「JWT로 읽을 수 없습니다」라고 나옵니다
복사할 때 일부가 빠졌거나 JWT에 쓸 수 없는 문자가 들어 있습니다. 어느 부분을 읽을 수 없는지 알려 주고, 입력란의 그 위치에 주황색 표시를 붙이니 그곳을 확인해 주세요.
JWT의 내용은 암호인가요?
암호가 아닙니다. 헤더와 페이로드는 정해진 표에 따라 글자로 바꾸었을 뿐(base64url)이므로 누구나 읽을 수 있습니다. 비밀번호나 개인 정보는 넣지 마세요.
무료로 쓸 수 있나요?
무료입니다. 가입도 필요 없고 광고도 없습니다.
다른 도구
- 전각·반각 변환
영문, 숫자, 가타카나의 전각과 반각을 한 번에 변환합니다.
- 히라가나⇔가타카나 변환
히라가나・가타카나・반각 가나를 한꺼번에 변환합니다. 한자나 영문・숫자는 그대로 둡니다.
- SNS 글자 수 세기(X・Instagram・YouTube)
X・Instagram・YouTube 등의 상한까지 몇 자 남았는지 SNS마다 다른 방식으로 셉니다. 글자 수・줄 수・바이트 수도 함께 보여 줍니다.
- JSON 정리
JSON을 보기 좋게 정리하거나 한 줄로 줄입니다. 잘못된 곳이 있으면 위치를 알려 줍니다.
- URL 인코딩・디코딩
한글이나 기호를 URL에서 쓸 수 있는 형태(%EC%95%88 등)로 인코딩하거나 원래 문자로 되돌립니다.
- 비밀번호 생성기
길이와 사용할 문자를 골라, 추측하기 어려운 비밀번호를 그 자리에서 만듭니다.