【问题标题】:Laravel 5.2 SAML2 Authentication persistance issueLaravel 5.2 SAML2 身份验证持久性问题
【发布时间】:2017-05-09 19:02:53
【问题描述】:

我已经安装了这个 github Laravel 5 Saml2 包: https://github.com/aacotroneo/laravel-saml2

我的登录工作正常,正在进行身份验证,并且数据正在正确传回。我有一个 LoginListener,它成功地捕获了正确的用户信息并从数据库中返回了一个有效的用户。但是,当我尝试使用 Auth::login 时,它不会在侦听器句柄函数之外持续存在,并且会进入 SAML 身份验证和侦听器之间的无限循环。

这是我的听众:

namespace App\Listeners;
use \Aacotroneo\Saml2\Events\Saml2LoginEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Auth;
use Illuminate\Session\Middleware\StartSession;
use App\Http\Controllers\HomeController;


class LoginListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
    }
    /**
     * Handle the event.
     *
     * @param  Saml2LoginEvent  $event
     * @return void
     */
    public function handle(Saml2LoginEvent $event)
    {
      $user = $event->getSaml2User();
            $userData = [
                'id' => $user->getUserId(),
                'attributes' => $user->getAttributes(),
                'assertion' => $user->getRawSamlAssertion()
            ];

            //check if email already exists and fetch user
            $user = \App\Models\User::where('username', $userData['attributes']['NameID'][0])->first();
            Auth::guard('web')->login($user);   
            Session::save();        
    }
}

我已在我的 saml2-settings 文件中的 routesMiddleware 设置中添加了“web”,正如在多个地方所建议的那样,但没有任何效果。有人在某个地方有这样的工作示例,我可以深入研究一下我做错了什么吗?

【问题讨论】:

    标签: php laravel-5.2 saml-2.0


    【解决方案1】:

    这个问题的解决方案原来是在中间件中。我设置了几个自定义中间件文件,它们干扰了 Web 中间件,开始解决问题。

    为了解决这个问题,我在内核中创建了一个名为 listener 的自定义中间件组,并删除了我添加到 web 的所有额外中间件:

    'listener' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        ], 
    

    然后在 saml2_settings 配置文件中,我将 routesMiddleware 变量更改为 listener:

    'routesMiddleware' => ['listener'],
    

    希望这有助于其他人在故障排除过程中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      相关资源
      最近更新 更多