You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Laravel Sanctum机制及前后端API身份验证实现的疑问

关于Laravel Sanctum身份验证机制的解答

你的理解部分正确,该结论仅适用于「同域/一级域名相同的SPA单页应用」这一特定场景,完整逻辑如下:

1. 无需手动处理token的场景逻辑

当你的前后端属于同域(比如前端是localhost:3000、后端是localhost:8000)或者共享一级域名(比如前端是app.example.com、后端是api.example.com)时,Sanctum确实可以全程通过cookie完成身份验证,不需要前端手动存储、携带token,完整流程是:

  • 前端首次请求时先调用/sanctum/csrf-cookie接口,初始化Laravel的CSRF防护cookie
  • 提交账号密码登录请求,登录校验通过后,Laravel会自动返回两个核心凭证cookie:
    • 核心会话cookie(默认名laravel_session):是HttpOnly属性的,JS无法读取,完全由浏览器自动管理,避免XSS漏洞导致凭证被盗
    • XSRF-TOKEN cookie:用于后续POST/PUT等请求的跨站请求伪造校验
  • 后续所有请求只要开启withCredentials配置(Axios设置axios.defaults.withCredentials = true,fetch请求设置credentials: 'include'),浏览器会自动携带所有同域cookie,不需要你手动在请求头加Authorization字段
  • 后端的auth:sanctum中间件会自动从cookie中解析会话信息,完成身份校验
    这种模式完全规避了localStorage存token的XSS风险,是SPA场景下的最优方案。

2. 需要手动处理token的场景

如果你的前端是第三方应用、移动端APP,或者前后端完全跨不同一级域名无法共享cookie,Sanctum还是支持传统的API Token模式:

  • 用户登录成功后,后端调用$user->createToken('token_name')->plainTextToken生成token返回给前端
  • 前端自行存储token,后续请求携带Authorization: Bearer <token>请求头
  • 后端中间件从请求头中解析token完成校验
    这种场景下还是需要手动处理token逻辑,和你之前的方案逻辑一致。

常见配置注意事项

使用cookie模式前要确认以下配置正确,否则会出现鉴权失败的问题:

  • .env中配置SESSION_DOMAIN为共享的一级域名,比如.example.com
  • config/sanctum.php中的stateful配置项添加你前端的访问域名
  • 后端CORS配置要开启supports_credentials = true,allowed_origins不能设为*,必须指定允许的前端域名

内容的提问来源于stack exchange,提问作者Dom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:06:03