개발
JWT 토큰 디코딩 방법
피터JK
2025. 1. 30. 21:54
728x90
1. 온라인 도구 이용
가장 쉬운 방법은 온라인 JWT 디코더를 사용하는 것입니다.
🔗 JWT 디코딩 사이트(https://jwt.io/)
- Encoded 부분에 JWT 토큰을 입력하면 Decoded 부분에서 Header와 Payload의 내용을 확인할 수 있습니다.
- 서명이 있는 경우 비밀 키를 입력하여 검증할 수도 있습니다.
2. Java 코드로 JWT 디코딩
Java에서 JWT를 디코딩하는 방법을 설명하겠습니다.
(1) io.jsonwebtoken(JJwt) 라이브러리 사용
Maven 설정
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.11.5</version>
</dependency>
Java 코드
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
public class JwtDecoder {
private static final String SECRET_KEY = "your_secret_key";
public static void main(String[] args) {
String jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwicm9sZSI6ImFkbWluIiwiZW1haWwiOiJ1c2VyQGV4YW1wbGUuY29tIiwiaWF0IjoxNzAwMDAwMDAwLCJleHAiOjE3MDAwMDM2MDB9.SIGNATURE";
Claims claims = decodeToken(jwt);
System.out.println("User ID: " + claims.getSubject());
System.out.println("Role: " + claims.get("role"));
System.out.println("Email: " + claims.get("email"));
}
public static Claims decodeToken(String jwt) {
return Jwts.parser()
.setSigningKey(SECRET_KEY)
.parseClaimsJws(jwt)
.getBody();
}
}
(2) Java에서 서명 없이 디코딩하기
JWT는 Base64로 인코딩되어 있으므로, 서명을 검증하지 않고 Payload를 단순히 디코딩할 수도 있습니다.
import java.util.Base64;
public class JwtBase64Decoder {
public static void main(String[] args) {
String jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwicm9sZSI6ImFkbWluIiwiZW1haWwiOiJ1c2VyQGV4YW1wbGUuY29tIiwiaWF0IjoxNzAwMDAwMDAwLCJleHAiOjE3MDAwMDM2MDB9.SIGNATURE";
String[] parts = jwt.split("\\.");
String payload = new String(Base64.getDecoder().decode(parts[1]));
System.out.println("Decoded Payload: " + payload);
}
}
3. JavaScript에서 디코딩
프론트엔드(React, Vue, etc.)에서 JWT를 디코딩할 경우 jwt-decode 라이브러리를 사용하면 편리합니다.
npm install jwt-decode
import jwtDecode from "jwt-decode";
const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwicm9sZSI6ImFkbWluIiwiZW1haWwiOiJ1c2VyQGV4YW1wbGUuY29tIiwiaWF0IjoxNzAwMDAwMDAwLCJleHAiOjE3MDAwMDM2MDB9.SIGNATURE";
const decoded = jwtDecode(token);
console.log("User ID:", decoded.sub);
console.log("Role:", decoded.role);
console.log("Email:", decoded.email);
4. Python에서 디코딩
Python에서는 jwt 라이브러리를 사용할 수 있습니다.
pip install pyjwt
import jwt
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwicm9sZSI6ImFkbWluIiwiZW1haWwiOiJ1c2VyQGV4YW1wbGUuY29tIiwiaWF0IjoxNzAwMDAwMDAwLCJleHAiOjE3MDAwMDM2MDB9.SIGNATURE"
decoded = jwt.decode(token, options={"verify_signature": False})
print("User ID:", decoded["sub"])
print("Role:", decoded["role"])
print("Email:", decoded["email"])
정리
방법 서명 검증 사용 예
| 방법 서명 | 검증 | 사용 예 |
| 온라인 도구 (jwt.io) | ❌ | 간단한 디코딩 |
| Java (JJwt) | ✅ | 서버에서 토큰 검증 및 디코딩 |
| Java Base64 디코딩 | ❌ | 단순 확인용 |
| JavaScript (jwt-decode) | ❌ | 프론트엔드에서 토큰 정보 확인 |
| Python (PyJWT) | ✅ | 서버에서 토큰 검증 및 디코딩 |
✅ 보안 주의사항
- 인증이 필요한 경우 반드시 서명을 검증해야 합니다.
- Base64 디코딩만 하면 누구나 내용을 볼 수 있으므로 중요한 데이터(비밀번호 등)는 포함하면 안 됩니다.
- 토큰의 exp(만료 시간) 체크하여 만료된 토큰을 거부해야 합니다.
JWT를 디코딩하고 검증하는 방법을 상황에 맞게 선택하면 됩니다!
728x90