完全可以通过 Cookie 进行 JWT 授权,把 access_token 放在 Cookie 中。
很多现代 Web 应用(尤其是前后端分离的项目)都采用 JWT + HttpOnly Cookie 的方式,这比每次手动在 Header 里带 Token 更方便,也更安全(在防范 XSS 方面)。
1. 两种常见做法对比
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Header (Bearer) | 更符合 RESTful、无状态、跨域灵活 | 每次请求都要手动携带,易被 XSS 窃取 | API 重度项目、移动端 |
| Cookie | 浏览器自动携带、支持 HttpOnly 防 XSS | 存在 CSRF 风险、Cookie 大小限制 | 普通 Web 网站、B/S 系统 |
2. 如何把 access_token 放到 Cookie
后端(推荐做法):
// 登录成功后设置 Cookie
res.cookie('access_token', jwtToken, {
httpOnly: true, // 关键:禁止 JS 读取,防 XSS
secure: true, // 只在 HTTPS 下传输
sameSite: 'strict', // 或 'lax',强烈推荐防 CSRF
maxAge: 15 * 60 * 1000, // 例如 15 分钟
path: '/'
});
读取 Token 的方式(中间件):
const token = req.cookies.access_token; // 使用 cookie-parser 等中间件
if (!token) return res.status(401).json({ msg: '未授权' });
// 验证 JWT
jwt.verify(token, secret, (err, payload) => { ... });
你也可以同时支持 Header 和 Cookie,让前端灵活选择:
const token = req.headers.authorization?.split(' ')[1] || req.cookies.access_token;