跨域安全传token需组合cors凭证支持、bearer头传输、https加密及httponly cookie存储,禁用url/localstorage传递,动态校验origin并设短时效jwt。

在跨域请求中安全传递 Token,核心是兼顾功能可用性与防御泄露风险。不能只靠“带上 token 就行”,而要结合请求方式、凭证策略、传输通道和存储机制综合设计。
明确 Token 类型与用途
不同 Token 承担不同职责,传递方式也不同:
-
会话 Token(如 JWT):用于身份认证,应通过
Authorization: Bearer <token></token>请求头发送,禁止放在 URL 或 body 中 -
CSRF Token:用于防伪造操作,通常随表单隐藏字段或自定义请求头(如
X-CSRF-Token)提交,不参与身份校验 -
临时访问 Token(如 OAuth2 access_token):有效期短、作用域受限,必须 HTTPS 传输,且建议配合
state参数防劫持
配置 CORS 响应头支持凭证
若需携带 Cookie 或认证头(如 Authorization),服务端必须显式启用凭证支持,否则浏览器会静默丢弃 Token:
- 响应头必须包含:
Access-Control-Allow-Credentials: true - 此时
Access-Control-Allow-Origin不能为通配符*,必须指定确切源(如https://app.example.com) - 如需允许多个源,服务端应动态匹配 Origin 请求头并回写合法值(注意防范反射型欺骗)
前端请求中正确携带 Token
避免常见错误写法,优先使用标准、可控的方式:
- 使用
fetch时设置credentials: 'include'(对应 Cookie)或手动添加Authorization头(对应 Token) - 不要把 Token 拼进 URL(易被日志、代理、Referer 泄露)
- AJAX 请求中禁用
withCredentials = false(默认值),否则 Cookie 不会发送 - 对敏感操作(如支付、改密),额外校验 Token 签发 IP、User-Agent 或绑定设备指纹(服务端实现)
强化 Token 本身的安全边界
传输只是环节之一,Token 的生成、存储与校验同样关键:
- 服务端签发 Token 时,设短有效期(如 15–30 分钟),搭配 Refresh Token 机制
- 前端存储 Token 避免用
localStorage(XSS 可读),推荐内存变量 + HTTP-only Cookie(含 Token 或 session ID) - 所有跨域 Token 请求必须走 HTTPS,且服务端校验
Origin或Referer(辅助验证,不可单独依赖) - 对第三方集成场景,使用
SameSite=Strict或Lax+Secure+HttpOnlyCookie 属性限制自动携带范围
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











