Nguyên tắc: access token giữ trong bộ nhớ, refresh token trong cookie HttpOnly.
- Access token → biến JS/closure (hoặc Web Worker để tách global scope). Không sống qua reload, nhưng đó lại là điểm mạnh: XSS khó lấy, blast radius nhỏ. Access token nên sống ngắn (vài phút).
- Refresh token → cookie
HttpOnly+Secure+SameSite. JS không đọc được nên XSS không exfiltrate được; trình duyệt tự đính cookie khi gọi endpoint refresh. - Tránh
localStoragecho token: bất kỳ script XSS nào (kể cả từ thư viện bên thứ ba) đều đọc được rồi replay từ nơi khác. - Web app truyền thống: lưu token server-side hoặc trong session cookie mã hóa.
Giảm rủi ro thêm: rút ngắn hạn access token + bật refresh token rotation.