> 디코드 | 검사 | 검증 <

// JSON Web Token(JWT)을 즉시 디코드하고 검사하세요

[보안]

로컬 처리

100% 클라이언트 사이드 JWT 디코딩. 토큰이 브라우저를 벗어나지 않습니다.

[즉시]

자동 디코드

붙여넣기 또는 입력 시 JWT 토큰을 자동으로 디코드합니다.

[무료]

전체 토큰 검사

헤더, 페이로드, 서명을 확인합니다. 알고리즘과 만료를 검증합니다.

// JWT 디코딩에 대해

JWT 구조:

JSON Web Token(JWT)은 점으로 구분된 세 개의 Base64URL 인코딩 부분으로 구성됩니다: 헤더.페이로드.서명. 헤더는 알고리즘과 토큰 유형을 지정합니다. 페이로드에는 클레임(데이터)이 포함됩니다. 서명은 토큰의 무결성을 검증합니다.

예시:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.signature → {"alg":"HS256"} + {"sub":"1234"}

일반적인 사용 사례:

  • >웹 애플리케이션의 인증 토큰 디버깅
  • >OAuth 2.0 및 OpenID Connect 토큰 검사
  • >토큰 만료 및 클레임 검증
  • >RFC 7519에 따른 JWT 구조 이해
  • >Base64URL 인코딩 무결성 확인

>> 자주 묻는 질문

Q: JSON Web Token(JWT)이란?

A: JWT(JSON Web Token)는 JSON 객체로 당사자 간에 안전하게 정보를 전송하기 위한 개방형 표준(RFC 7519)입니다. 컴팩트하고 URL 안전하며 인증에 널리 사용됩니다.

Q: JWT의 세 부분은?

A: JWT는 점으로 구분된 세 부분으로 구성됩니다: 헤더(알고리즘과 유형), 페이로드(클레임과 데이터), 서명(검증 해시). 각 부분은 Base64URL로 인코딩됩니다.

Q: 비밀 키 없이 JWT를 디코드할 수 있나요?

A: 네, JWT의 헤더와 페이로드는 단순히 Base64URL로 인코딩(암호화 아님)되어 있으므로 누구나 디코드할 수 있습니다. 비밀 키는 서명을 검증하는 데만 필요합니다.

Q: JWT와 세션 기반 인증의 차이점은?

A: 세션은 세션 ID 쿠키로 서버에 상태를 저장합니다. JWT는 상태가 없습니다 — 토큰 자체에 필요한 모든 정보가 포함되어 있습니다.

Q: JWT 만료는 어떻게 작동하나요?

A: JWT 페이로드의 exp 클레임은 Unix 타임스탬프로 만료 시간을 지정합니다. 이 시간이 지나면 토큰은 유효하지 않은 것으로 간주됩니다.

// 일반적인 JWT 서명 알고리즘

헤더의 alg 값이 서명 방식을 정합니다. HS*는 공유 비밀 키를, RS*, PS*, ES*, EdDSA는 키 쌍을 사용합니다.

alg알고리즘
HS256HMAC + SHA-256
HS512HMAC + SHA-512
RS256RSA PKCS#1 v1.5 + SHA-256
PS256RSASSA-PSS + SHA-256
ES256ECDSA P-256 + SHA-256
EdDSAEd25519

// 코드에서 JWT 검증하기

디코딩만으로는 아무것도 검증되지 않습니다. 검증할 때는 허용할 알고리즘을 항상 명시하세요.

Node.js (jsonwebtoken)   jwt.verify(token, secret, { algorithms: ['HS256'] })
Python (PyJWT)           jwt.decode(token, key, algorithms=["HS256"])
PHP (firebase/php-jwt)   JWT::decode($token, new Key($key, 'HS256'))
Go (golang-jwt)          jwt.Parse(token, keyFunc, jwt.WithValidMethods([]string{"HS256"}))
Java (jjwt)              Jwts.parser().verifyWith(key).build().parseSignedClaims(token)

>> 더 많은 질문

Q: 표준 클레임 iss, sub, aud, exp, nbf, iat, jti는 무슨 뜻인가요?

A: iss는 발급자, sub는 주체(보통 사용자 ID), aud는 의도된 수신자, exp는 만료 시각, nbf는 유효 시작 시각, iat는 발급 시각, jti는 토큰 고유 ID입니다. 시각은 Unix 초 단위입니다.

Q: JWT는 암호화되어 있나요?

A: 일반적인 서명된 JWT(JWS)는 암호화되어 있지 않고 Base64URL로 인코딩되었을 뿐이라 누구나 내용을 읽을 수 있습니다. 서명은 변조만 막아 줍니다. 민감한 정보는 넣지 말거나 암호화된 JWE를 사용하세요.

Q: JWT 서명은 어떻게 검증하나요?

A: 키가 필요합니다. HS256은 공유 비밀 키, RS256/ES256은 공개 키입니다. 서버는 헤더.페이로드의 서명을 다시 계산해 비교합니다. 이 디코더는 브라우저에서 동작하며 서명을 검증하지 않으므로 검증된 라이브러리를 사용하세요.

Q: JWT에서 흔한 보안 실수는 무엇인가요?

A: 토큰 자체의 alg(특히 none)를 신뢰하는 것, 약한 HS256 비밀 키, exp·iss·aud 미검증, 페이로드에 민감 정보 포함, 수명이 긴 토큰을 localStorage에 저장하는 것이 대표적입니다.

// 다른 언어