Commit e2231fb5 authored by Anthony Gautreau's avatar Anthony Gautreau
Browse files

[shib] Permet la déconnexion par l'idp

Ajout de la variable 'idp_logout' pour permettre de passer par l'IDP pour la déconnexion Shibboleth, même si il ne redirige pas correctement.
parent f29fcbbb
Loading
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -77,6 +77,11 @@ return [
             */
            'logout_url' => '/Shibboleth.sso/Logout?return=', // NB: '?return=' semble obligatoire!

            /**
             * Autorise l'IDP à gérer la déconnexion
             */
            'idp_logout' => false,

            /**
             * Simulation d'authentification d'un utilisateur.
             */
+20 −8
Original line number Diff line number Diff line
@@ -138,15 +138,25 @@ class Shib extends AbstractAdapter
    public function logout(EventInterface $e)
    {
        $storage = $this->getStorage()->read();

        if (is_array($storage)){
            if (! isset($storage['identity'])) {
                return;
            }
        }else if (!$storage instanceof SessionIdentity) {
            return;
        }

        parent::logout($e);

        // désactivation de l'usurpation d'identité éventuelle
        $this->shibService->deactivateUsurpation();

        /**
         * Si on souhaite que l'IDP Shibboleth gère la déconnexion
         * malgré qu'il puisse ne pas rediriger correctement (voir plus bas).
         */
        if ($this->moduleOptions->getShib()['idp_logout'] && $storage->getType() == 'shib') {
            // URL vers laquelle on redirige après déconnexion
            $returnUrl = $this->router->assemble([], [
                'name' => 'zfcuser/logout',
@@ -157,6 +167,8 @@ class Shib extends AbstractAdapter
            $response = new Response();
            $response->getHeaders()->addHeaderLine('Location', $shibbolethLogoutUrl);
            $response->setStatusCode(302);
            return $response;
        }

        /**
         * Problème : l'IDP Shibboleth ne redirige pas correctement vers l'URL demandée après déconnexion.