티스토리 뷰
728x90
블랙리스트를 사용하는 JWT 인증 시스템을 구현하려면, 일반적으로는 서버에 토큰 블랙리스트를 저장하고 관리하는 기능이 필요합니다. 이를 구현하는 가장 간단한 방법 중 하나는 데이터베이스에 블랙리스트를 저장하는 것입니다.
아래는 Node.js, Express.js, 그리고 MongoDB를 사용하여 JWT 토큰 블랙리스트를 구현한 간단한 예제입니다.
우선, 필요한 모듈을 설치해야 합니다:
npm install express jsonwebtoken mongoose
const express = require('express');
const jwt = require('jsonwebtoken');
const mongoose = require('mongoose');
const TokenBlacklistSchema = new mongoose.Schema({
token: String,
expiryDate: Date,
});
const TokenBlacklist = mongoose.model('TokenBlacklist', TokenBlacklistSchema);
const app = express();
app.use(express.json());
app.post('/logout', async (req, res) => {
const { token } = req.body;
const decoded = jwt.verify(token, 'secret_key');
const blacklistedToken = new TokenBlacklist({
token,
expiryDate: decoded.exp * 1000 // JWT exp is in seconds, so convert to milliseconds
});
await blacklistedToken.save();
res.sendStatus(200);
});
app.post('/protected', async (req, res) => {
const { token } = req.body;
const blacklistedToken = await TokenBlacklist.findOne({ token });
if (blacklistedToken) {
res.sendStatus(401);
return;
}
try {
jwt.verify(token, 'secret_key');
res.json({ message: 'You are authorized!' });
} catch (err) {
res.sendStatus(401);
}
});
app.listen(3000);
이 코드에서 /logout 엔드포인트는 사용자의 토큰을 블랙리스트에 추가합니다. /protected 엔드포인트는 블랙리스트에 있는 토큰을 거부하고, 블랙리스트에 없는 토큰을 검증하여 인증된 요청을 처리합니다.
이 코드는 간단한 예제로, 실제 환경에서는 보안 강화를 위한 추가적인 로직이 필요합니다. 예를 들어, 사용자 로그인 시 패스워드를 해시하는 것, JWT 토큰에 유효 시간을 설정하는 것, 오래된 블랙리스트 항목을 정기적으로 삭제하는 것 등이 있습니다.
'개발' 카테고리의 다른 글
Redis를 사용한 JWT 갱신 토큰 관리방법 (2) | 2023.07.04 |
---|---|
[개발]JWT 갱신 토큰 관리 방법(7)- 로컬스토리지/쿠키 구현 (0) | 2023.07.03 |
[개발]JWT 갱신 토큰 관리 방법(5)-블랙리스트 사용 (0) | 2023.07.03 |
[개발]JWT갱신토큰 관리 방법(4)-DB사용 구현 (0) | 2023.07.03 |
[개발]JWT 갱신 토큰 관리 방법(3)-DB 사용 (0) | 2023.07.03 |