如何在Laravel所有web路由中校验SAML2 SSO登录状态?
实现Laravel SAML2全局路由登录校验
步骤1:创建自定义SAML认证中间件
运行Artisan命令生成中间件:
php artisan make:middleware SamlAuthenticate
步骤2:编写中间件校验逻辑
打开app/Http/Middleware/SamlAuthenticate.php,替换内容为:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Symfony\Component\HttpFoundation\Response; class SamlAuthenticate { public function handle(Request $request, Closure $next): Response { // 检查用户是否已通过SAML认证登录 if (!Auth::check()) { // 重定向到你的SAML登录端点(替换实际UUID) return redirect()->route('saml2.login', ['uuid' => 'some-long-uuid']); } return $next($request); } }
步骤3:注册中间件
打开app/Http/Kernel.php,在$routeMiddleware数组中添加中间件别名:
protected $routeMiddleware = [ // ... 保留原有中间件 'saml.auth' => \App\Http\Middleware\SamlAuthenticate::class, ];
步骤4:应用中间件到web路由组
打开routes/web.php,将所有需要校验的web路由包裹在中间件组内:
Route::middleware(['saml.auth'])->group(function () { // 这里放置你的所有web路由 Route::get('/', function () { return view('welcome'); }); // 其他业务路由... });
补充说明
- 若需排除部分公共路由(如首页、帮助页),可将这些路由放在中间件组外,或在中间件内添加排除逻辑:
// 在中间件handle方法开头添加 $publicRoutes = ['/', '/help']; if (in_array($request->path(), $publicRoutes)) { return $next($request); } - 确保
Auth::check()能正确识别SAML登录用户,这依赖于你配置SAML时在login回调中实现的用户创建/匹配逻辑
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

