Access Token과 Refresh Token은 JWT(JSON Web Token)를 사용하는 인증 시스템에서 흔히 사용되는 두 가지 토큰이다. 이 두 토큰은 사용자의 인증 상태를 유지하고, 보안을 강화하기 위해 사용된다.
Access Token은 사용자가 인증되었음을 증명하는 짧은 수명의 토큰이다.
주로 API 요청 시 사용된다.
Refresh Token은 Access Token을 갱신하기 위해 사용되는 긴 수명의 토큰이다.
Access Token이 만료되었을 때 새로운 Access Token을 발급받는 데 사용된다.
const express = require('express');
const jwt = require('jsonwebtoken');
const cookieParser = require('cookie-parser');
const app = express();
app.use(express.json());
app.use(cookieParser());
const ACCESS_TOKEN_SECRET = 'youraccesstokensecret';
const REFRESH_TOKEN_SECRET = 'yourrefreshtokensecret';
app.post('/login', (req, res) => {
const username = req.body.username;
const user = { name: username };
const accessToken = jwt.sign(user, ACCESS_TOKEN_SECRET, { expiresIn: '15m' });
const refreshToken = jwt.sign(user, REFRESH_TOKEN_SECRET, { expiresIn: '7d' });
res.cookie('refreshToken', refreshToken, { httpOnly: true, secure: true });
res.json({ accessToken });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
import axios from 'axios';
const fetchData = async () => {
try {
const response = await axios.get('/protected-route', {
headers: { Authorization: `Bearer ${accessToken}` }
});
console.log(response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
};
fetchData();
Access Token이 만료되면 클라이언트는 Refresh Token을 사용하여 새로운 Access Token을 요청합니다.
app.post('/token', (req, res) => {
const refreshToken = req.cookies.refreshToken;
if (!refreshToken) return res.sendStatus(401);
jwt.verify(refreshToken, REFRESH_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
const accessToken = jwt.sign({ name: user.name }, ACCESS_TOKEN_SECRET, { expiresIn: '15m' });
res.json({ accessToken });
});
});
dd