JWT를 디버깅할 때 가장 먼저 보는 것은 보통 payload입니다.
하지만 token을 아무 온라인 사이트에 붙여 넣기에는 찝찝합니다.
특히 실제 환경 token에는:
- user id
- role
- scope
- expiration
- issuer
같은 정보가 들어갈 수 있습니다.
그래서 만든 도구가 JWT Decoder and Header Inspector입니다.
어떤 도구인가
이 도구는 JWT를 브라우저 안에서 decode합니다.
확인할 수 있는 것은 다음과 같습니다.
- header JSON
- payload JSON
- algorithm
- token type
- registered claims
exp,nbf,iat시간 해석- Base64URL segment 구조
- signature byte metadata
중요한 점은 이 도구가 서명을 검증하지 않는다는 것입니다.
즉:
decode 가능 != 검증 완료
입니다.
기본 사용법
- JWT input에 token을 붙여 넣습니다.
Decode버튼을 누르거나 자동 결과를 확인합니다.- header와 payload를 봅니다.
- claim table에서 시간 관련 claim을 확인합니다.
- 필요한 경우
Copy payload로 payload JSON을 복사합니다.
Sample 버튼을 누르면 구조를 보기 좋은 예제 token을 넣을 수 있습니다.
header에서 볼 것
JWT header에서는 보통 alg와 typ를 봅니다.
{
"alg": "HS256",
"typ": "JWT"
}
여기서 alg는 서명 알고리즘을 의미합니다.
보안 이슈를 볼 때는 token이 어떤 알고리즘을 선언하는지, 서버가 그 값을 어떻게 검증하는지까지 봐야 합니다.
이 도구는 header를 보여줄 뿐, 알고리즘 안전성을 보장하지는 않습니다.
payload에서 볼 것
payload에서는 registered claim을 먼저 확인하는 편이 좋습니다.
iss: issuersub: subjectaud: audienceexp: expiration timenbf: not beforeiat: issued at
특히 exp는 자주 봅니다.
토큰이 만료됐는데 API 요청이 401로 실패하는 경우가 많기 때문입니다.
조심해야 할 점
JWT는 Base64URL로 인코딩되어 있을 뿐 암호화된 것이 아닙니다.
누구나 decode해서 payload를 읽을 수 있습니다.
그래서 JWT payload에는 비밀번호나 민감한 개인 정보를 넣으면 안 됩니다.
또한 이 도구에서 decode가 성공했다고 해서 token이 신뢰 가능한 것은 아닙니다.
서명 검증은 서버의 secret/public key와 정책이 있어야 가능합니다.
한 줄 요약
JWT Decoder and Header Inspector는 JWT header와 payload, 시간 claim을 로컬에서 확인하는 도구이며, decode와 signature verification은 반드시 구분해서 봐야 합니다.