JWT access token이 만료되면 매번 로그인해야 하는데, refresh token은 어떻게 구현하나요?
JWT Refresh Token 구현 흐름:
1. 로그인 → access token (15분) + refresh token (7일) 발급2. API 요청 → access token 사용3. access token 만료 → 401 응답4. 클라이언트 → refresh token으로 /api/refresh 호출5. 서버 → 새 access token 발급6. refresh token도 만료 → 재로그인
서버 코드 (Express):
// 로그인app.post("/login", async (req, res) => { const user = await authenticate(req.body); const accessToken = jwt.sign({ id: user.id }, SECRET, { expiresIn: "15m" }); const refreshToken = jwt.sign({ id: user.id }, REFRESH_SECRET, { expiresIn: "7d" }); // refresh token은 HttpOnly 쿠키에 저장 res.cookie("refreshToken", refreshToken, { httpOnly: true, secure: true }); res.json({ accessToken });});// 토큰 갱신app.post("/refresh", (req, res) => { const { refreshToken } = req.cookies; const payload = jwt.verify(refreshToken, REFRESH_SECRET); const newAccess = jwt.sign({ id: payload.id }, SECRET, { expiresIn: "15m" }); res.json({ accessToken: newAccess });});
보안 포인트: refresh token은 DB에 저장하여 무효화(revoke) 가능하게 구현하세요.
댓글 1
JWT Refresh Token 구현 흐름:
서버 코드 (Express):
보안 포인트: refresh token은 DB에 저장하여 무효화(revoke) 가능하게 구현하세요.