사용 방법
- 토큰을 입력창에 붙여 넣습니다. 앞의 Bearer와 줄바꿈은 자동으로 지워집니다. 예시 불러오기로 샘플 토큰을 써 볼 수 있습니다.
- 헤더와 페이로드, 그 아래의 발급·사용 시작·만료 시각을 확인합니다. 배지가 토큰의 만료 여부를 알려 줍니다.
- HS256, HS384, HS512 토큰의 서명을 확인하려면 서명 확인 영역을 열고 비밀키를 입력한 뒤 서명 확인을 누릅니다.
예시
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
→ 헤더 {"alg":"HS256","typ":"JWT"}, 페이로드 {"sub":"1234567890","name":"John Doe","iat":1516239022}jwt.io에서 쓰는 샘플 토큰입니다. iat 1516239022는 2018-01-18T01:30:22Z이고 만료 클레임은 없습니다.같은 토큰과 비밀키 your-256-bit-secret
→ 이 비밀키로 서명이 유효합니다.
같은 토큰과 비밀키 wrong
→ 이 비밀키와 서명이 일치하지 않습니다.
계산 방식
토큰은 점에서 나뉩니다. 헤더와 페이로드는 Base64url에서 텍스트로 디코딩되어 정리된 JSON으로 표시되며, jose 라이브러리를 씁니다. 세 번째 부분은 서명이고 디코딩하지 않습니다.
상태 배지는 exp와 nbf 클레임을 내 기기의 현재 시각과 비교합니다. exp가 지났으면 만료됨, nbf가 아직 미래이면 아직 유효하지 않음, exp가 미래이면 만료되지 않음, 둘 다 없으면 만료 클레임 없음입니다. 배지는 클레임만 설명하며 토큰이 진짜라는 뜻은 아닙니다.
서명 확인은 헤더에 적힌 알고리즘으로, 입력한 비밀키를 써서 앞의 두 부분의 HMAC을 다시 계산하고 서명과 비교합니다. 여기서는 서명만 확인하며, 만료와 다른 클레임은 이 결과에 포함되지 않습니다.
출처
자주 묻는 질문
- JWT 안에는 무엇이 들어 있나요?
- 점으로 구분된 세 부분입니다. 서명 알고리즘을 알려 주는 헤더, 주체(sub)·발급자(iss)·만료(exp) 같은 클레임이 담긴 페이로드, 그리고 서명입니다. 앞의 둘은 Base64url로 적힌 JSON입니다.
- 디코딩과 검증은 같은 것인가요?
- 아니요. 디코딩은 토큰을 읽을 뿐이며 누구나 할 수 있습니다. 페이로드는 암호화가 아니라 인코딩된 것이기 때문입니다. 토큰을 신뢰하려면 서버가 올바른 키로 서명을 검증하고 만료와 다른 클레임도 확인해야 합니다.
- 시간 클레임은 무엇을 뜻하나요?
- exp는 토큰이 효력을 잃는 시각, nbf는 그 전에는 받아들이면 안 되는 시각, iat는 발급된 시각입니다. 세 값 모두 1970년 1월 1일 UTC 이후의 초로 적습니다. 이 도구는 이를 날짜로 보여 주고 현재 시각과 비교해 배지를 정합니다.
- HMAC 서명만 확인할 수 있는 이유는 무엇인가요?
- HS256, HS384, HS512는 하나의 공유 비밀키를 쓰므로 그 키를 입력해 확인할 수 있습니다. RS256이나 ES256 같은 알고리즘은 발급자의 공개키가 필요한데, 이 도구는 공개키를 받지 않습니다.
- 토큰을 여기에 붙여 넣어도 안전한가요?
- 디코딩과 확인은 브라우저 안에서 실행되며 아무것도 전송되지 않습니다. 그래도 유효한 토큰은 만료되기 전까지 비밀번호처럼 쓰일 수 있으니, 직접 관리하지 않는 웹사이트에는 운영 토큰이나 비밀키를 붙여 넣지 말고 테스트 토큰을 쓰세요.