본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 3. · 27 Views
JWT 최신 기능 완벽 가이드
JWT(JSON Web Token)의 최신 기능과 보안 강화 방법을 알아봅니다. ES256 알고리즘, 토큰 갱신 전략, 보안 베스트 프랙티스를 실전 코드와 함께 학습합니다.
들어가며
이 글에서는 JWT 최신 기능 완벽 가이드에 대해 상세히 알아보겠습니다. 총 8가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- JWT_기본_생성_및_검증
- ES256_비대칭_암호화
- Refresh_Token_전략
- JWT_Claims_활용
- 토큰_블랙리스트_관리
- 토큰_페이로드_암호화
- 토큰_자동_갱신_미들웨어
- 권한_기반_토큰_검증
1. JWT 기본 생성 및 검증
개요
JWT를 생성하고 검증하는 기본 방법입니다. HS256 알고리즘을 사용하여 안전하게 토큰을 만들고 확인합니다.
코드 예제
const jwt = require('jsonwebtoken');
const payload = { userId: 123, role: 'admin' };
const secret = process.env.JWT_SECRET;
const token = jwt.sign(payload, secret, { expiresIn: '1h' });
const verified = jwt.verify(token, secret);
console.log(verified); // { userId: 123, role: 'admin' }
설명
sign 메서드로 페이로드를 암호화하여 토큰을 생성하고, verify 메서드로 토큰의 유효성을 검증합니다. expiresIn 옵션으로 만료 시간을 설정할 수 있습니다.
2. ES256 비대칭 암호화
개요
ES256(ECDSA) 알고리즘을 사용한 비대칭 키 암호화 방식입니다. 공개키와 개인키를 분리하여 보안성을 높입니다.
코드 예제
const { generateKeyPairSync } = require('crypto');
const { publicKey, privateKey } = generateKeyPairSync('ec', {
namedCurve: 'prime256v1'
});
const token = jwt.sign({ data: 'secure' }, privateKey, {
algorithm: 'ES256'
});
const decoded = jwt.verify(token, publicKey);
설명
개인키로 서명하고 공개키로 검증하는 방식으로, 개인키 노출 없이도 토큰 검증이 가능합니다. HS256보다 안전한 방식입니다.
3. Refresh Token 전략
개요
Access Token과 Refresh Token을 분리하여 보안성과 사용성을 모두 확보하는 전략입니다.
코드 예제
const generateTokens = (userId) => {
const accessToken = jwt.sign({ userId }, secret, {
expiresIn: '15m'
});
const refreshToken = jwt.sign({ userId }, refreshSecret, {
expiresIn: '7d'
});
return { accessToken, refreshToken };
};
설명
짧은 유효기간의 Access Token과 긴 유효기간의 Refresh Token을 함께 발급합니다. Access Token 만료 시 Refresh Token으로 재발급받아 보안과 편의성을 동시에 확보합니다.
4. JWT Claims 활용
개요
JWT의 표준 클레임(claims)을 활용하여 토큰에 메타데이터를 추가합니다. iss, aud, nbf 등의 표준 필드를 사용합니다.
코드 예제
const token = jwt.sign(
{ userId: 123 },
secret,
{
issuer: 'myapp.com',
audience: 'api.myapp.com',
notBefore: '5s',
jwtid: 'unique-token-id'
}
);
설명
issuer는 발급자, audience는 수신자, notBefore는 활성화 시점, jwtid는 토큰 고유 ID를 나타냅니다. 표준 클레임으로 토큰 관리가 체계적으로 가능합니다.
5. 토큰 블랙리스트 관리
개요
로그아웃된 토큰을 무효화하기 위해 블랙리스트를 관리하는 방법입니다. Redis를 활용하여 효율적으로 처리합니다.
코드 예제
const redis = require('redis');
const client = redis.createClient();
const blacklistToken = async (token) => {
const decoded = jwt.decode(token);
const ttl = decoded.exp - Math.floor(Date.now() / 1000);
await client.setEx(`blacklist:${token}`, ttl, '1');
};
설명
로그아웃 시 토큰을 블랙리스트에 추가하고, 토큰 만료 시간만큼 TTL을 설정합니다. 토큰 검증 시 블랙리스트를 확인하여 무효화된 토큰을 거부합니다.
6. 토큰 페이로드 암호화
개요
민감한 정보를 페이로드에 담을 때 추가 암호화를 적용하는 방법입니다. JWE(JSON Web Encryption)를 활용합니다.
코드 예제
const { JWE } = require('node-jose');
const encrypt = async (payload, key) => {
const encrypted = await JWE.createEncrypt({ format: 'compact' }, key)
.update(JSON.stringify(payload))
.final();
return encrypted;
};
설명
JWT는 기본적으로 Base64 인코딩만 되어 있어 페이로드가 노출됩니다. JWE로 페이로드를 암호화하면 민감한 정보도 안전하게 전달할 수 있습니다.
7. 토큰 자동 갱신 미들웨어
개요
Express 미들웨어로 토큰 만료가 임박하면 자동으로 갱신하는 기능입니다.
코드 예제
const autoRefresh = (req, res, next) => {
const token = req.headers.authorization?.split(' ')[1];
const decoded = jwt.decode(token);
const timeLeft = decoded.exp - Date.now() / 1000;
if (timeLeft < 300) { // 5분 미만 남음
const newToken = jwt.sign({ userId: decoded.userId }, secret);
res.setHeader('X-New-Token', newToken);
}
next();
};
설명
토큰 만료 5분 전부터 새 토큰을 응답 헤더에 포함시켜 클라이언트가 자동으로 갱신할 수 있도록 합니다. 끊김 없는 사용자 경험을 제공합니다.
8. 권한 기반 토큰 검증
개요
토큰에 포함된 권한 정보를 확인하여 접근 제어를 수행하는 미들웨어입니다.
코드 예제
const requireRole = (role) => (req, res, next) => {
const token = req.headers.authorization?.split(' ')[1];
const decoded = jwt.verify(token, secret);
if (decoded.role !== role) {
return res.status(403).json({ error: 'Forbidden' });
}
next();
};
설명
토큰의 role 필드를 검증하여 특정 권한이 있는 사용자만 접근할 수 있도록 합니다. 라우트별로 필요한 권한을 지정할 수 있습니다. JWT 최신 기능과 보안 베스트 프랙티스를 8개의 카드로 정리했습니다. 실무에서 바로 적용 가능한 코드 예제들입니다.
마치며
이번 글에서는 JWT 최신 기능 완벽 가이드에 대해 알아보았습니다. 총 8가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#JWT #Authentication #Security #TokenRefresh #ES256
이 카드뉴스가 포함된 코스
댓글 (0)
함께 보면 좋은 카드 뉴스
Istio 보안 완벽 가이드
마이크로서비스 환경에서 필수적인 Istio 보안 기능을 실무 중심으로 설명합니다. mTLS부터 인증, 인가까지 단계별로 학습하여 안전한 서비스 메시를 구축할 수 있습니다.
서비스 메시 완벽 가이드
마이크로서비스 간 통신을 안전하고 효율적으로 관리하는 서비스 메시의 핵심 개념부터 실전 도입까지, 초급 개발자를 위한 완벽한 입문서입니다. Istio와 Linkerd 비교, 사이드카 패턴, 실무 적용 노하우를 담았습니다.
EFK 스택 로깅 완벽 가이드
마이크로서비스 환경에서 로그를 효과적으로 수집하고 분석하는 EFK 스택(Elasticsearch, Fluentd, Kibana)의 핵심 개념과 실전 활용법을 초급 개발자도 쉽게 이해할 수 있도록 정리한 가이드입니다.
Grafana 대시보드 완벽 가이드
실시간 모니터링의 핵심, Grafana 대시보드를 처음부터 끝까지 배워봅니다. Prometheus 연동부터 알람 설정까지, 초급 개발자도 쉽게 따라할 수 있는 실전 가이드입니다.
분산 추적 완벽 가이드
마이크로서비스 환경에서 요청의 전체 흐름을 추적하는 분산 추적 시스템의 핵심 개념을 배웁니다. Trace, Span, Trace ID 전파, 샘플링 전략까지 실무에 필요한 모든 것을 다룹니다.