본문 바로가기
Q&A2022년 5월 11일1분 읽기

JWT refresh token 구현 방법

전
전민규
조회 1056댓글 1

JWT access token이 만료되면 매번 로그인해야 하는데, refresh token은 어떻게 구현하나요?

댓글 1

김김영삼4년 전

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) 가능하게 구현하세요.

Ctrl+Enter로 등록