JWT 기반 인증을 구현하고 있는데, 토큰 만료 처리가 고민됩니다.
access token이 만료되면 사용자가 로그인 페이지로 튕기는 게 UX상 별로인 것 같고, refresh token을 도입하려는데 구체적으로 어떤 플로우로 구현해야 하는지 모르겠습니다.
현재 스택은 Express + React이고, access token 만료를 15분으로 설정해뒀습니다. refresh token은 어디에 저장하는 게 안전한가요? httpOnly 쿠키? localStorage?
댓글 3
기본 플로우는 이렇습니다:
```
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에도 저장해서 로그아웃 시 무효화할 수 있게 하세요.