2017-05-09 2 views
0

J'ai installé ce package github Laravel 5 SAML2: https://github.com/aacotroneo/laravel-saml2Laravel 5.2 La question de l'authentification SAML2

J'ai la connexion de travail, l'authentification se passe et les données sont passé correctement. J'ai un LoginListener qui attrape avec succès les informations d'utilisateur correctes et renvoie un utilisateur valide de la base de données. Toutefois, lorsque j'essaie d'utiliser Auth :: login, il ne persiste pas en dehors de la fonction de gestionnaire d'écouteurs et entre dans une boucle sans fin entre l'authentification SAML et l'écouteur.

Voici mon Listener:

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();   
    } 
} 

J'ai ajouté « web » à mon réglage routesMiddleware dans le fichier SAML2-paramètres comme il est suggéré dans plusieurs endroits sans effet. Est-ce que quelqu'un a un exemple concret de ceci quelque part que je peux creuser pour voir ce que je fais mal?

Répondre

0

La solution à cela s'est avérée être dans le middleware. J'ai plusieurs configurations de fichiers middleware personnalisés et ils interféraient avec le middleware web commencer la solution au problème.

Pour résoudre cela, je créé une coutume middlewareGroup dans le noyau appelé auditeur et retiré tous les middleware supplémentaire que j'avais ajouté à la page Web:

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

Ensuite, dans le saml2_settings fichier config j'ai changé la variable routesMiddleware à écouteur:

'routesMiddleware' => ['listener'], 

Espérons que cela aide quelqu'un d'autre dans le processus de dépannage.