JWT 토큰을 디코딩하고 검사하는 방법

· 4 분 소요

JSON Web Token(JWT)은 최신 웹 응용 프로그램에서 인증을 처리하는 가장 일반적인 방법입니다. 인증 측에서 무언가가 잘못되면 — 사용자가 이유 없이 로그아웃되거나, 권한이 잘못되거나, API가 401을 반환하면 — JWT를 디코딩하는 것이 종종 첫 번째 디버깅 단계입니다.

JWT에 포함된 내용

JWT에는 점으로 구분된 세 부분이 있습니다:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U

헤더 — 알고리즘(HS256, RS256 등)과 토큰 유형을 포함합니다.

{"alg": "HS256", "typ": "JWT"}

페이로드 — 사용자와 토큰에 대한 클레임(주장)을 포함합니다.

{"sub": "1234567890", "name": "Alice", "exp": 1700000000}

서명 — 토큰이 변경되지 않았음을 보장하는 암호학적 지문. 서명 키 없이는 읽을 수 없습니다.

일반적인 JWT 클레임

클레임 전체 이름 내용
sub Subject 사용자 ID 또는 식별자
exp Expiration 유효 종료의 Unix 타임스탬프
iat Issued At 생성의 Unix 타임스탬프
iss Issuer 토큰을 만든 사람(인증 서버)
aud Audience 토큰의 대상
nbf Not Before 이 날짜 이전에는 토큰이 유효하지 않음
jti JWT ID 토큰의 고유 식별자

JWT를 디코딩하는 방법

  1. 토큰 붙여넣기 — 디코더에 전체 JWT(header.payload.signature 형식)를 입력하세요.
  2. 디코딩된 섹션 확인 — 도구가 헤더(알고리즘), 페이로드(클레임) 및 서명을 포맷된 JSON으로 표시합니다.
  3. 클레임 검토 — 만료 날짜, 발급자, 주제 및 사용자 정의 클레임을 검사하세요.

JWT로 디버깅

토큰이 만료되었습니까? exp 클레임을 확인하세요. Unix 타임스탬프를 사람이 읽을 수 있는 날짜로 변환하세요. 지나갔다면 토큰이 만료되어 새로 고쳐야 합니다.

잘못된 권한? 페이로드에서 역할 또는 범위 클레임을 찾으세요. 구현에 따라 다르지만 종종 "role": "admin" 또는 "scope": "read write"처럼 보입니다.

사용자 ID 문제? sub 클레임은 사용자를 식별합니다. 예상 ID와 일치하는지 확인하세요.

토큰 거부됨? aud(audience) 클레임을 확인하세요. API가 특정 audience를 기대하는데 토큰이 다른 것을 가지고 있다면 거부됩니다.

중요한 보안 참고 사항

자주 묻는 질문

디코더로 JWT 서명을 확인할 수 있습니까?

아니요. 서명 확인에는 서버에 보관된 서명 비밀 또는 공개 키가 필요합니다. 디코더는 토큰에 무엇이 있는지 보여주지만 암호화 확인은 백엔드에서 이루어져야 합니다. 프로덕션에서 확인되지 않은 JWT를 절대 신뢰하지 마세요.

온라인 도구에 JWT를 붙여넣는 것이 안전합니까?

예, 도구가 브라우저에서 실행될 때. 브라우저 내 디코더는 토큰을 로컬에서 처리합니다 — 어떤 것도 서버로 전송되지 않습니다. 토큰으로 네트워크 요청을 하는 도구는 피하세요.

exp 클레임이란 무엇입니까?

exp(expiration) 클레임은 토큰이 만료되는 시기를 나타내는 Unix 타임스탬프입니다. 이 날짜 이후에는 토큰이 거부되어야 합니다. 인증 문제를 디버깅할 때 항상 이 클레임을 확인하세요.

JWT를 암호화할 수 있습니까?

표준 JWT(JWS)는 서명되었지만 암호화되지 않았습니다 — 누구나 페이로드를 디코딩할 수 있습니다. JWE(JSON Web Encryption) 토큰은 암호화되지만 덜 일반적입니다. 표준 JWT 페이로드에 민감한 데이터(비밀번호, 비밀)를 절대 넣지 마세요.