본문 바로가기
Q&A해결2025년 11월 18일1분 읽기

JWT 토큰 만료 처리 어떻게 하나요

백
백엔드주니어
조회 646댓글 3
JWT 기반 인증을 구현하고 있는데, 토큰 만료 처리가 고민됩니다. access token이 만료되면 사용자가 로그인 페이지로 튕기는 게 UX상 별로인 것 같고, refresh token을 도입하려는데 구체적으로 어떤 플로우로 구현해야 하는지 모르겠습니다. 현재 스택은 Express + React이고, access token 만료를 15분으로 설정해뒀습니다. refresh token은 어디에 저장하는 게 안전한가요? httpOnly 쿠키? localStorage?

댓글 3

김김영삼11개월 전
refresh token은 반드시 **httpOnly + Secure + SameSite=Strict 쿠키**에 저장하세요. localStorage는 XSS에 취약합니다.

기본 플로우는 이렇습니다:

```
1. 로그인 → access token(15분) + refresh token(7일) 발급
2. API 요청 시 access token 만료 → 401 응답
3. 클라이언트에서 /api/refresh 호출 (쿠키의 refresh token 자동 전송)
4. 서버에서 refresh token 검증 → 새 access token 발급
5. 원래 요청 재시도
```

Axios interceptor를 쓰면 이 과정을 자동화할 수 있습니다:

```javascript
axios.interceptors.response.use(
res => res,
async err => {
if (err.response?.status === 401 && !err.config._retry) {
err.config._retry = true;
await axios.post('/api/refresh');
return axios(err.config);
}
return Promise.reject(err);
}
);
```

refresh token은 DB에도 저장해서 로그아웃 시 무효화할 수 있게 하세요.
백백엔드주니어(guest)11개월 전
아 interceptor로 자동 갱신하는 거군요! 코드 예시까지 감사합니다. refresh token rotation도 적용하면 더 안전하겠죠?
김김영삼11개월 전
네, refresh token rotation은 꼭 적용하세요. refresh 할 때마다 기존 토큰 폐기하고 새 refresh token을 발급하는 방식입니다. 탈취 감지에도 유용합니다.
Ctrl+Enter로 등록