티스토리 뷰

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 토큰에 유효 시간을 설정하는 것, 오래된 블랙리스트 항목을 정기적으로 삭제하는 것 등이 있습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함