JSON 웹 토큰(JWT)은 당사자 간에 정보를 JSON 개체로 안전하게 전송하는 컴팩트하고 독립적인 방법입니다. JWT는 웹 애플리케이션에서 사용자를 인증하는 데 널리 사용됩니다. 이 튜토리얼에서는 JWT 인증을 사용하여 Node.js 및 Express 백엔드를 구축합니다.
JWT(JSON Web Token)는 당사자 간 정보를 JSON 객체로 안전하게 전송하기 위한 개방형 표준입니다. 각 토큰은 세 부분으로 구성됩니다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huZG9lIn0.H6BBiB1y5eXKXvW9bbjT2Rg8Jp4oE4Y5Kxf_sDF7Kzg
새 프로젝트 디렉토리 만들기:
mkdir jwt-auth-app cd jwt-auth-app
새 Node.js 프로젝트 초기화:
npm init -y
필요한 종속성을 설치합니다.
npm install express jsonwebtoken bcryptjs dotenv express-validator
server.js에서 기본 서버 설정을 만듭니다.
// server.js require('dotenv').config(); const express = require('express'); const app = express(); app.use(express.json()); // Import Routes const authRoutes = require('./routes/auth'); app.use('/api/auth', authRoutes); const PORT = process.env.PORT || 5000; app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
환경 변수를 저장하기 위한 .env 파일을 만듭니다.
PORT=5000 JWT_SECRET=your_jwt_secret_key
// routes/auth.js const express = require('express'); const { body, validationResult } = require('express-validator'); const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); const router = express.Router(); const users = []; // In-memory user storage // Signup Route router.post( '/signup', [ body('username').isLength({ min: 3 }), body('password').isLength({ min: 5 }) ], async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) return res.status(400).json({ errors: errors.array() }); const { username, password } = req.body; const hashedPassword = await bcrypt.hash(password, 10); users.push({ username, password: hashedPassword }); res.status(201).json({ message: 'User registered successfully' }); } ); // Login Route router.post( '/login', [ body('username').notEmpty(), body('password').notEmpty() ], async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) return res.status(400).json({ errors: errors.array() }); const { username, password } = req.body; const user = users.find(u => u.username === username); if (!user) return res.status(400).json({ message: 'Invalid credentials' }); const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) return res.status(400).json({ message: 'Invalid credentials' }); const token = jwt.sign({ username }, process.env.JWT_SECRET, { expiresIn: '1h' }); res.json({ token }); } ); module.exports = router;
const token = jwt.sign({ username }, process.env.JWT_SECRET, { expiresIn: '1h' });
경로를 보호하려면 미들웨어를 만들어 토큰을 확인하세요.
// middleware/auth.js const jwt = require('jsonwebtoken'); module.exports = function (req, res, next) { const token = req.header('Authorization')?.split(' ')[1]; if (!token) return res.status(401).json({ message: 'Access denied' }); try { const decoded = jwt.verify(token, process.env.JWT_SECRET); req.user = decoded; next(); } catch (ex) { res.status(400).json({ message: 'Invalid token' }); } };
유효한 토큰이 필요한 보호 경로 만들기:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huZG9lIn0.H6BBiB1y5eXKXvW9bbjT2Rg8Jp4oE4Y5Kxf_sDF7Kzg
이 튜토리얼에서는 Node.js 및 Express 백엔드에서 JWT 인증을 설정하는 기본 사항을 다루었습니다. 이 가이드에서는 다음을 시연했습니다.
JWT는 인증을 처리하는 강력한 방법으로 웹 애플리케이션을 안전하고 확장 가능하게 만듭니다.
위 내용은 웹 앱에서 JWT 인증 생성 및 보안의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!