讲师中心 微信公众号
AI工具推荐 视频效率加速

JWT多用户跨域请求鉴权Laravel跨域中间件兼容

浅明大大_9803

浅明大大_9803

发布时间:2026-08-15 16:31:25

|

138人浏览过

|

来源于php中文网

原创

JWT多用户跨域鉴权需全局CORS中间件+异常兜底+按guard隔离认证与黑名单。路由须显式指定middleware('auth:admin'),模型实现JWTSubject并注入guard标识,刷新与黑名单操作均需带guard前缀。

jwt多用户跨域请求鉴权laravel跨域中间件兼容

JWT 多用户跨域请求鉴权在 Laravel 中不是简单配个 CORS 就能跑通的事。核心矛盾在于:多 guard(如 user、admin、merchant)各自独立认证,而跨域响应头(尤其是 Access-Control-Allow-Origin)必须在所有鉴权路径下一致生效——包括预检请求、正常请求、以及 JWT 认证失败(如 401)的异常响应。

多 guard 下的跨域中间件必须全局兜底

Laravel 自带的 fruitcake/laravel-cors 中间件默认只对匹配 paths 的请求生效,且不介入异常响应流程。当 jwt.auth 中间件校验失败抛出 TokenExpiredException 或 TokenInvalidException 时,请求链已中断,CORS 头根本不会写入响应——前端看到的是“无 Access-Control-Allow-Origin”,而非真实的 401 错误。

  • 不要依赖中间件顺序调整来“覆盖”异常路径;正确做法是自建一个轻量级全局中间件(如 App\Http\Middleware\GlobalCors),放在 $middleware 数组最前(Kernel.php 中)
  • 该中间件对所有响应统一添加必要头:Access-Control-Allow-Origin、Access-Control-Allow-Headers、Access-Control-Allow-Methods、Access-Control-Allow-Credentials
  • 若需支持凭证(如前端用 withCredentials: true),Access-Control-Allow-Origin 不能为 *,须动态匹配 Origin 请求头或白名单校验

每个 guard 的认证流程必须隔离且显式声明

跨域请求能否成功,取决于前端传来的 token 是否被对应 guard 正确识别。这要求三者严格一致:

Laravel Creem Agent
Laravel Creem Agent

Creem 支付商店助理 — 查询订阅、客户、交易、产品,执行心跳检查,管理本地 Laravel支付商店。

下载
  • 路由中间件:必须明确指定 guard 名,例如 middleware('auth:admin'),而不是 middleware('jwt.auth')(后者已废弃,且不感知 guard 上下文)
  • 请求头:前端必须确保 Authorization 头格式正确,且 token 是由对应 guard 签发的(admin guard 签发的 token 无法被 user guard 解析)
  • 模型实现:每个用户模型(App\Models\Admin、App\Models\Merchant)都必须实现 JWTSubject 接口,并在 getJWTCustomClaims() 中注入唯一标识字段(如 'guard' => 'admin'),用于后续黑名单隔离和 payload 区分

JWT 异常响应也得带 CORS 头

仅靠全局中间件还不够——它虽能覆盖正常响应,但无法拦截框架抛出的未捕获异常。因此要在 app/Exceptions/Handler.php 的 render() 方法中做二次兜底:

  • 判断响应是否为 JWTException 或其子类(如 TokenExpiredException、TokenInvalidException、TokenBlacklistedException)
  • 对这类响应手动设置状态码并追加 CORS 头:response()->setStatusCode(401)->header('Access-Control-Allow-Origin', $origin)
  • 注意:不要直接写死 *,应从请求中提取 $request->header('Origin') 并校验是否在白名单内,避免安全风险

黑名单与刷新逻辑必须按 guard 切片

跨域环境下,多个用户类型共用同一套 token 黑名单会导致鉴权错乱。例如 admin 登出后,user 的 token 可能被误删。

  • 重写 JWTBlacklist 的 add() 方法,在 cache key 或数据库字段中拼入 guard 标识,如 blacklist_admin_abc123
  • 刷新接口必须显式调用对应 guard:Auth::guard('admin')->refresh(),否则默认走 api guard,返回的 token 可能无法被 auth:admin 中间件识别
  • 前端收到新 token 后,务必更新后续请求的 Authorization 头,否则仍会因旧 token 过期或被拉黑而持续 401

热门AI工具

更多
UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

837

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

815

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2468

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3741

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

5310

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

3556

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

6709

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

1396

2026.03.04

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 200人学习

Composer手册
Composer手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn