JWT 토큰을 디코딩하고 청구서를 안전하게 검사하는 방법
빠른 답변
JWT을 디코딩하려면 토큰을 JWT 디코더에 붙여넣으면 헤더와 페이로드가 즉시 JSON 형식으로 나타납니다. 이 도구는 Base64URL로 인코딩된 부분을 로컬로 디코딩하므로 토큰이 브라우저를 떠나지 않습니다. 기억하세요: 디코딩하면 내용만 표시됩니다. 서명을 확인하지 않습니다.
소개
JWT(JSON 웹 토큰)은 인증 및 정보 교환에 사용되는 컴팩트한 URL 안전 토큰 형식입니다. JWT에는 점으로 구분된 세 부분(header.payload.signature)이 있습니다. 헤더는 알고리즘과 토큰 유형을 지정하고, 페이로드에는 클레임(사용자 ID, 역할, 만료)이 포함되어 있으며, 서명은 토큰이 변조되지 않았음을 증명합니다. JWT을 디코딩하면 디버깅을 위해 해당 내용을 검사할 수 있지만 디코딩은 진위 여부를 확인하지 않습니다. 이 가이드에서는 브라우저에서 JWT를 안전하게 디코딩하는 방법을 보여줍니다.
단계별
-
JWT 디코더 도구를 엽니다.
JWT 디코더 도구 페이지로 이동하세요. 이 도구는 모든 JWT 문자열(점으로 구분된 세 개의 Base64URL 인코딩 부분)을 허용합니다.
-
JWT 토큰을 붙여넣으세요.
JWT을 입력 필드에 붙여넣습니다. 일반적인 JWT은 eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSJ9.signature와 같습니다. 이 도구는 세 부분을 자동으로 감지합니다.
-
디코딩된 헤더 검토
Base64URL 도구는 첫 번째 부분을 디코딩하여 JSON로 표시합니다. 헤더에는 일반적으로 'alg'(알고리즘, 예: HS256) 및 'typ'(유형, 일반적으로 'JWT')가 포함됩니다.
-
디코딩된 페이로드(클레임) 검토
도구는 두 번째 부분을 디코딩하고 클레임을 JSON 형식으로 표시합니다. 일반적인 클레임에는 'sub'(주체/사용자 ID), 'iat'(발급 위치), 'exp'(만료) 및 'role'(사용자 역할)이 포함됩니다.
-
서명 확인(세 번째 부분)
도구에 서명 부분이 표시됩니다. 참고: 디코딩은 서명을 확인하지 않습니다. 확인하려면 서명 키와 확인 라이브러리가 필요합니다. 서버 측 서명을 확인하지 않고 JWT의 주장을 신뢰하지 마십시오.
예
간단한 JWT 디코딩
입력: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMSIsIm5hbWUiOiJBbGljZSIsImlhdCI6MTY5MzUyNjQwMH0.signature
산출: Header: {"alg":"HS256","typ":"JWT"}
Payload: {"sub":"user1","name":"Alice","iat":1693526400}
만료 청구가 있는 JWT
입력: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTY5MzYxMjgwMH0.sig
산출: Header: {"alg":"HS256"}
Payload: {"sub":"admin","exp":1693612800}
일반적인 문제
- 디코드와 확인을 혼동합니다. JWT을 디코딩하면 내용만 읽을 수 있습니다. 토큰이 진짜라는 것을 증명하지는 않습니다. 항상 서명 키를 사용하여 서버 측 서명을 확인하세요.
- 만료된 토큰 신뢰 - 'exp' 클레임을 확인하고 만료된 토큰을 거부합니다. 'exp' 값은 초 단위의 Unix 타임스탬프입니다.
- Base64 대 Base64URL —JWT은 Base64URL 인코딩을 사용합니다(패딩 없음, + 및 / 대신 - 및 _). 표준 Base64 디코더는 JWT 부분에서 실패합니다.
- 페이로드의 민감한 데이터 —JWT 페이로드는 토큰을 가진 사람이라면 누구나 읽을 수 있습니다. 페이로드에 비밀번호, 신용 카드 번호 또는 기타 비밀을 저장하지 마십시오.
팁
- 모든 클레임을 신뢰하기 전에 항상 서버 측 JWT 서명을 확인하십시오. 디코딩만으로는 인증이 아닙니다.
- 토큰이 현재 시간에 유효한지 확인하려면 'exp'(만료) 및 'nbf'(이전 아님) 클레임을 확인하세요.
- 긴 세션의 경우 새로 고침 토큰과 함께 단기 토큰(15~60분)을 사용하여 토큰이 유출될 경우 피해를 최소화합니다.
- 안전한 로컬 디버깅을 위해 JWT 디코더를 사용하세요. 토큰이 브라우저를 떠나지 않습니다.