JWT( JSON Web Token ) 이용한 권한 인증 관리

tpids·2024년 10월 10일

project2

목록 보기
3/17

JWT( JSON Web Token )

두 시스템 간에 JSON 형식의 데이터를 안전하게 전송하기 위한 토큰.
주로 인증과 정보 교환 목적으로 사용되며,
웹 애플리케이션에서 사용자 인증 상태를 유지하는 데 많이 활용.

JWT 설치

npm install jsonwebtoken

authController.js

const jwt = require('jsonwebtoken');

// JWT 토큰 생성
function generateToken(user) {
    const token = jwt.sign({ userId: user.user_id, role: user.role }, 'your_jwt_secret', { expiresIn: '1h' });
    return token;
}

// JWT 토큰 검증 미들웨어
function authenticateToken(req, res, next) {
    const authHeader = req.headers['authorization'];
    const token = authHeader && authHeader.split(' ')[1];

    if (!token) {
        return res.sendStatus(401); // Unauthorized
    }

    jwt.verify(token, 'your_jwt_secret', (err, user) => {
        if (err) {
            return res.sendStatus(403); // Forbidden
        }

        req.user = user; // 사용자 정보를 요청 객체에 저장
        next();
    });
}

// 권한 확인 미들웨어
function authorizeMaster(req, res, next) {
    if (req.user && req.user.role === 'master') {
        next();
    } else {
        res.status(403).send('Forbidden: Master admin access required');
    }
}

function authorizeAdmin(req, res, next) {
    if (req.user && (req.user.role === 'master' || req.user.role === 'admin')) {
        next();
    } else {
        res.status(403).send('Forbidden: Admin access required');
    }
}

function authorizeUser(req, res, next) {
    if (req.user) {
        next();
    } else {
        res.status(401).send('Unauthorized');
    }
}

module.exports = { generateToken, authenticateToken, authorizeMaster, authorizeAdmin, authorizeUser };

Swagger UI 를 이용한 테스트
1. 로그인 성공시 JWT 발급

2. 토큰 입력 후 인증

3. 마스터 권한은 안되는 모습 ( 로그인한 계정은 일반 사용자 권한 )

4. 일반 사용자 권한은 되는 모습

profile
개발자

0개의 댓글