Access Token 存储在 LocalStorage 安全吗?遇到跨域请求被泄露怎么办?

UX乙豪 阅读 31

我在做用户登录功能时把 Access Token 放在了 LocalStorage,但测试跨域请求时突然出现错误:“Failed to load resource: Preflight response is not successful”。折腾了一下午,发现后端 CORS 配置没问题,但每次请求头里都没有带 Token,这是不是说明 Token 被泄露了?

我的登录成功后这样存储的:


const handleLogin = () => {
  axios.post('/api/login', { username, password })
    .then(res => {
      localStorage.setItem('authToken', res.data.token);
      axios.defaults.headers.common['Authorization'] = <code>Bearer ${res.data.token}</code>;
    });
};

后来改用 sessionStorage 问题依旧,难道只能用 HttpOnly 的 Cookie?但前端又拿不到 Cookie 值发请求啊…是不是我的存储方式根本就有问题?

我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
慕容梦幻
LocalStorage 有 XSS 泄露风险,但你的问题是跨域请求没带 token,是前端没自动加请求头。用 Axios 就别手动设 defaults,改成每次请求拦截:

axios.interceptors.request.use(config => {
const token = localStorage.getItem('authToken');
if (token) config.headers.Authorization = Bearer ${token};
return config;
});


这样每次请求都会自动带上 token,CORS 才不会失败。至于安全,防 XSS 比纠结存储位置更重要,真怕泄露就上 HttpOnly + SameSite 严格模式。搞定。
点赞 3
2026-02-11 11:01