로그인 토큰 내용 확인
개발 중인 서비스가 발급한 액세스 토큰에 사용자 ID·권한 클레임이 제대로 들어갔는지 봅니다.
JWT DECODER · CLAIMS READER
이 토큰 안에 뭐가 들었을까?
eyJhbGciOi… 로 시작하는 JWT 를 붙여 넣고 디코드를 누르면 헤더와 페이로드를 JSON 으로 펼치고, exp·iat·nbf 를 사람이 읽는 시각으로 바꿔 만료 여부를 알려 줍니다. 서명은 검증하지 않고 내용만 읽습니다.
-
-
이 도구는 서명 검증을 제공하지 않습니다. 비밀키나 인증정보를 입력받지 않으며, 도구 입력값·인증정보를 서버로 보내지 않는 정책을 지킵니다. 디코딩은 진위 확인이 아니므로 신뢰할 수 없는 토큰의 내용을 인증에 사용하지 마세요.
MADE FOR YOUR WORK
개발 중인 서비스가 발급한 액세스 토큰에 사용자 ID·권한 클레임이 제대로 들어갔는지 봅니다.
API 가 401 을 돌려줄 때 토큰의 exp 가 이미 지났는지, 서버 시각과 어긋났는지 시각으로 확인합니다.
소셜 로그인·SSO 에서 받은 ID 토큰의 iss, aud, sub 값이 설정과 맞는지 대조합니다.
페이로드는 누구나 읽을 수 있으므로 비밀번호·주민번호 같은 값이 실려 있지 않은지 검토합니다.
STEP BY STEP
이렇게 쓰세요
JWT 칸에 점(.)으로 구분된 세 부분짜리 토큰을 넣습니다. 앞의 'Bearer ' 는 빼고 넣으세요.
Header 와 Payload 칸에 각 부분을 JSON 으로 풀어 보여 줍니다.
Payload 아래에 iat·nbf·exp 가 로컬 시각과 UTC(ISO) 로 나옵니다.
exp 가 지났으면 '만료된 토큰', 아니면 '아직 만료되지 않음', 없으면 'exp 클레임 없음'이 표시됩니다.
UNDERSTAND THE BASICS
JWT 는 헤더.페이로드.서명 세 부분을 점으로 이은 문자열입니다. 헤더와 페이로드는 JSON 을 base64url 로 인코딩한 것일 뿐 암호화된 것이 아닙니다. 그래서 이 도구처럼 누구나 내용을 읽을 수 있고, 페이로드에 비밀 정보를 넣으면 안 됩니다.
보안을 지키는 것은 세 번째 부분인 서명입니다. 발급 서버가 헤더와 페이로드를 비밀키(HS256)나 개인키(RS256·ES256)로 서명하고, 받는 서버는 같은 비밀키나 짝이 되는 공개키로 서명을 확인해 내용이 바뀌지 않았음을 믿습니다. 페이로드의 글자 하나만 바꿔도 서명이 맞지 않게 됩니다.
이 도구는 디코드만 하고 서명은 검증하지 않습니다. 검증하려면 키가 필요한데, 키를 웹 페이지에 붙여 넣는 습관 자체가 위험하기 때문입니다. '아직 만료되지 않음'은 토큰이 진짜라는 뜻이 아니라 exp 값이 미래라는 뜻일 뿐입니다.
| 클레임 | 이름 | 뜻 |
|---|---|---|
| iss | Issuer | 발급한 곳 |
| sub | Subject | 토큰의 주인(보통 사용자 ID) |
| aud | Audience | 이 토큰을 받을 서비스 |
| exp | Expiration Time | 만료 시각(Unix 초) |
| nbf | Not Before | 이 시각 전에는 쓰면 안 됨(Unix 초) |
| iat | Issued At | 발급 시각(Unix 초) |
| jti | JWT ID | 토큰 고유 번호(재사용 방지용) |
JWT 헤더와 페이로드를 브라우저에서 디코드하고 exp, iat, nbf 시각과 만료 여부를 확인합니다.
JWT 문자열을 붙여 넣어 헤더와 페이로드를 확인하세요. 디코딩 결과만으로 서명의 진위나 토큰의 신뢰성을 판단할 수 없습니다.
QUICK EXAMPLE
header.payload.signature
헤더와 페이로드의 클레임 읽기
디코딩은 서명 검증이 아닙니다. 이 결과만으로 토큰을 신뢰하면 안 됩니다.
JWT 의 각 부분은 base64url 로 인코딩돼 있습니다. 일반 base64 와 달리 + 와 / 대신 - 와 _ 를 쓰고 끝의 = 패딩을 생략하므로, 되돌려 놓고 패딩을 채운 뒤 디코드합니다.
디코드한 바이트는 UTF-8 로 읽습니다. atob 의 결과를 그대로 문자열로 쓰면 한글이 든 클레임이 깨집니다.
exp·iat·nbf 는 Unix 초라 사람이 읽을 수 있는 시각으로 바꿔 보여주고, exp 가 지났으면 만료로 표시합니다.
**서명은 검증하지 않습니다.** 검증하려면 비밀키나 공개키가 있어야 하고, 그것을 이 화면에 입력하게 만들 수는 없습니다. 여기서 '만료되지 않음'은 토큰이 유효하다는 뜻이 아니라 exp 값이 미래라는 뜻일 뿐입니다. 내용은 누구나 읽을 수 있으니, 붙여넣기 전에 그 토큰이 아직 살아 있는 것인지 생각하세요.
BEFORE YOU FINISH
서버에서 서명 검증 없이 페이로드의 role 같은 값을 그대로 쓰면 누구나 토큰을 고쳐 관리자가 될 수 있습니다. 반드시 라이브러리로 서명과 alg 를 검증하세요.
살아 있는 액세스 토큰은 그 자체로 로그인 권한입니다. 공유 문서나 메신저에 붙이지 말고, 어디에 붙이든 먼저 이미 만료됐거나 폐기해도 되는 토큰인지 생각하세요.
JWT 의 exp·iat·nbf 는 Unix 초 단위입니다. 밀리초 값을 넣으면 먼 미래 시각이 돼 토큰이 사실상 만료되지 않습니다.
JWT 칸에 토큰을 붙여 넣고 디코드를 누르면 됩니다. 헤더와 페이로드가 JSON 으로, 시간 클레임은 읽을 수 있는 시각으로 나옵니다.
지원하지 않습니다. 비밀키나 공개키를 입력받지 않으며, 서명 검증은 서버 코드에서 검증 라이브러리로 하세요.
일반적인 JWT(JWS)는 서명만 됐을 뿐 암호화되지 않아 누구나 내용을 읽을 수 있습니다. 내용까지 숨기는 JWE 는 다섯 부분으로 돼 있으며 이 도구로는 디코드되지 않습니다.
페이로드의 exp 값이 만료 시각입니다. 이 도구는 exp 를 로컬 시각과 UTC 로 바꿔 보여 주고 현재 시각과 비교해 만료 배지를 붙입니다.
점으로 나눈 부분이 세 개가 아니거나, 헤더·페이로드가 올바른 base64url JSON 이 아닐 때입니다. 앞의 Bearer 나 감싼 따옴표가 함께 들어가지 않았는지 확인하세요.
이 도구의 입력 데이터는 브라우저에서 처리하며 도구 기능을 위해 서버로 업로드하지 않습니다. 결과를 공유하기 전 민감한 정보가 없는지 확인하세요.