关于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-TOKENcookie:用于后续POST/PUT等请求的跨站请求伪造校验
- 核心会话cookie(默认名
- 后续所有请求只要开启
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.comconfig/sanctum.php中的stateful配置项添加你前端的访问域名- 后端CORS配置要开启
supports_credentials = true,allowed_origins不能设为*,必须指定允许的前端域名
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

