Access Token 存储在 LocalStorage 安全吗?遇到跨域请求被泄露怎么办?
我在做用户登录功能时把 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 值发请求啊…是不是我的存储方式根本就有问题?
这样每次请求都会自动带上 token,CORS 才不会失败。至于安全,防 XSS 比纠结存储位置更重要,真怕泄露就上 HttpOnly + SameSite 严格模式。搞定。