JWT
JWT 디코더
JSON Web Token의 헤더와 페이로드를 디코딩하세요.
JWT에 대하여
JSON Web Token은 헤더, 페이로드, 서명을 점으로 연결된 세 개의 Base64URL 인코딩 세그먼트로 묶습니다. 헤더와 페이로드는 단순히 인코딩된 JSON이라 누구나 읽을 수 있으며, 토큰이 변조되지 않았음을 실제로 증명하는 것은 서명입니다.
헤더의 alg 필드는 서명 알고리즘을 나타내지만, 헤더는 그저 디코딩된, 검증되지 않은 JSON일 뿐이므로 클라이언트는 그 안의 내용이 사실이라고 신뢰할 수 없습니다. 잘 알려진 JWT 취약점 중 하나는 공격자가 alg를 "none"으로 바꾸고 서명을 제거해, 부주의한 검증자가 서명 없는 토큰을 받아들이기를 노리는 것입니다. 진짜 검증은 검증하는 서버 스스로가 선택한 특정 알고리즘과 키에 대해 서명을 확인해야 하며, 토큰에서 읽어온 것이어서는 안 됩니다. 페이로드의 exp와 iat 클레임은 Unix 타임스탬프(밀리초가 아니라 에포크 이후의 초)입니다. 이를 달력 날짜로 읽으려면 이 도구를 타임스탬프 변환기와 함께 사용하세요.
사용되는 곳
- OAuth나 OIDC 제공자가 발급한 액세스 토큰이나 ID 토큰 검사
- 토큰에 예상한 클레임이 없는 이유 디버깅
- 코드를 작성하지 않고 토큰의 만료 시간이나 발급자 확인
- 타사 API나 라이브러리가 토큰에 실제로 무엇을 넣는지 이해
자주 묻는 질문
디코딩하면 서명도 검증되나요?
아닙니다. 이것은 헤더와 페이로드를 읽을 수 있도록 디코딩만 합니다. 서명은 검증하지 않으므로, 디코딩된 토큰이 진짜이거나 만료되지 않았다는 증거는 아닙니다.
검증하지 않은 토큰의 클레임을 신뢰할 수 있나요?
보안과 관련된 결정에는 사용할 수 없습니다. 누구나 임의의 클레임을 가진 JWT를 만들 수 있으며, 발급자의 키로 검증된 서명만이 내용을 신뢰할 수 있게 만듭니다.
여기에 붙여넣은 토큰이 저장되나요?
아닙니다. 디코딩은 해당 요청 내에서만 완전히 이루어지며 기록되거나 보관되지 않습니다.
헤더의 alg 필드를 신뢰할 수 있나요?
그 자체만으로는 신뢰할 수 없습니다. 원시 토큰을 읽는 사람 입장에서 헤더는 검증되지 않은, 공격자가 조작할 수 있는 JSON입니다. 잘 알려진 JWT 공격은 alg를 "none"으로 설정하고 서명을 완전히 제거해, 헤더를 맹목적으로 신뢰하는 검증자가 이를 유효하다고 받아들이기를 노립니다. 올바른 검증 코드는 기대하는 알고리즘과 키를 미리 고정해 두고, 그 판단을 토큰 자체에서 가져오는 일이 없습니다. 이 도구는 읽기 위해 디코딩만 할 뿐, 신뢰에 관한 판단은 전혀 내리지 않습니다.