클라우드컴퓨팅·네트워크
[HTTP 보안] JWT 저장 방식별 장단점과 사실상 표준
devracoon
2026. 1. 23. 15:04
JWT를 어디에 저장할지는 XSS(스크립트 해킹)와 CSRF(요청 위조) 중 무엇을 더 경계하느냐에 따라 갈립니다.
로컬스토리지
주로 프론트엔드 개발자들이 구현의 편의성을 위해 자주 사용한다고 합니다.
- 장점:
자바스크립트로 쉽게 읽고 쓸 수 있어 구현이 매우 단순합니다.
헤더에 직접 담아 보내므로 CSRF 공격으로부터 원천적으로 안전합니다. - 단점:
XSS(Cross-Site Scripting) 공격에 취약합니다.
공격 스크립트가 실행되면 `localStorage.getItem()` 한 줄로 사용자의 토큰을 바로 탈취당합니다.
쿠키 (feat. HttpOnly)
일반적으로 더 권장되는 방식입니다. 다만, 로컬스토리지보다는 설정의 복잡성이 있습니다.
- 장점:
HttpOnly 설정을 하면 자바스크립트가 쿠키를 읽을 수 없습니다.
즉, XSS 공격으로 토큰을 훔쳐가는 것이 불가능합니다. - 단점:
브라우저가 요청마다 쿠키를 자동으로 실어 보내므로 CSRF 공격에 노출됩니다.
그러나, SameSite 설정을 하거나 CSRF 설정을 켜면 됩니다.
사실상 표준이 된 하이브리드 전략
로컬스토리지와 쿠키의 장점을 합친 방식을 사용합니다.
수명이 짧은 액세스 토큰과 수명이 긴 리프레시 토큰을 따로 두는 방법입니다.
- Access Token:
자바스크립트 메모리(변수)에 저장합니다.
수명이 짧고 페이지 새로고침 시 사라지지만, XSS로부터 가장 안전합니다. - Refresh Token:
HttpOnly + Secure 쿠키에 저장합니다.
Access Token이 만료되면 이 쿠키를 이용해 서버로부터 새 토큰을 받아옵니다.