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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:28:10