用于SSO的laravel-saml2实现中的身份验证持久性无限循环问题(单点登录)

时间:2017-06-22 13:54:18

标签: php laravel laravel-5 single-sign-on saml-2.0

我已经为我的客户端实现了SSO登录,因为我已经在laravel 5.2中实现了服务提供程序,根据可用的git存储库here

根据我已经实施的文档,它可以正常登录和重定向,但问题是我不想使用身份验证方法检查用户是否在我们的数据库中可用,所以它将检查用户是否已登录

public function handle($request, Closure $next)
{
    if ($this->auth->guest())
    {
        if ($request->ajax())
        {
            return response('Unauthorized.', 401);
        }
        else
        {
                 return Saml2::login(URL::full());
                     //return redirect()->guest('auth/login');
        }
    }

    return $next($request);
};
当用户登录第三方网站时,

下面的事件就会触发。

Event :: listen(' Aacotroneo \ Saml2 \ Events \ Saml2LoginEvent',function(Saml2LoginEvent $ event){

        $user = $event->getSaml2User();
        $userData = [
            'id' => $user->getUserId(),
            'attributes' => $user->getAttributes(),
            'assertion' => $user->getRawSamlAssertion()
        ];
         $laravelUser = //find user by ID or attribute
         //if it does not exist create it and go on  or show an error message
         Auth::login($laravelUser);
    });

所以在我的情况下,我不想在我们这边维护用户数据库,它将从我在这里使用的代码下面进入无限循环

事件::听(' Aacotroneo \ Saml2 \ Events \ Saml2LoginEvent',功能(\ Aacotroneo \ Saml2 \ Events \ Saml2LoginEvent $ event){

        $user = $event->getSaml2User();

        $userData = [
            'id' => $user->getUserId(),
            'attributes' => $user->getAttributes(),
            'assertion' => $user->getRawSamlAssertion()
        ];

        $email=$user->getUserId();
    });

尝试按照设置指南操作。我在注册本地用户会话时遇到问题。我创建了一个SamlEventListener将它挂钩到Saml2LoginEvent。当事件被触发时,句柄被正确地移动,因此我执行Auth :: login($ laravelUser),这在此时似乎是成功的。虽然重新加载页面并执行中间件时,$ this-> auth-> guest()返回true,进入无限循环。有什么想法吗?

0 个答案:

没有答案