Commit ca7e11b1 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Configuration de la stratégie d'extraction d'un identifiant utile parmi les...

Configuration de la stratégie d'extraction d'un identifiant utile parmi les données d'authentification shibboleth (config 'shib_user_id_extractor').
parent abb31635
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ Première version officielle sous ZF3.

3.2.0
-----
- Configuration de la stratégie d'extraction d'un identifiant utile parmi les données d'authentification shibboleth
  (config 'shib_user_id_extractor').
- Possibilité de connaître la source de l'authentification (db, ldap, cas, shib).
- Possibilité de stopper l'usurpation en cours pour revenir à l'identité d'origine.
- [FIX] Usurpation d'un compte local en BDD.
+38 −0
Original line number Diff line number Diff line
@@ -187,6 +187,44 @@ $settings = [
            'supannEtuId|supannEmpId',
        ],
        */

        /**
         * Configuration de la stratégie d'extraction d'un identifiant utile parmi les données d'authentification
         * shibboleth.
         * Ex: identifiant de l'usager au sein du référentiel établissement, transmis par l'IDP via le supannRefId.
         */
        'shib_user_id_extractor' => [
            /*
            // domaine (ex: 'unicaen.fr') de l'EPPN (ex: hochonp@unicaen.fr')
            'unicaen.fr' => [
                [
                    // nom du 1er attribut recherché
                    'name' => 'supannRefId', // ex: '{OCTOPUS:ID}1234;{ISO15693}044D1AZE7A5P80'
                    // pattern éventuel pour extraire la partie intéressante
                    'preg_match_pattern' => '|\{OCTOPUS:ID\}(\d+)|', // ex: permet d'extraire '1234'
                ],
                [
                    // nom du 2e attribut recherché, si le 1er est introuvable
                    'name' => 'supannEmpId',
                    // pas de pattern donc valeur brute utilisée
                    'preg_match_pattern' => null,
                ],
                [
                    // nom du 3e attribut recherché, si le 2e est introuvable
                    'name' => 'supannEtuId',
                ],
            ],
            */
            // config de repli pour tous les autres domaines
            'default' => [
                [
                    'name' => 'supannEmpId',
                ],
                [
                    'name' => 'supannEtuId',
                ],
            ],
        ],
    ],

    /**
+36 −0
Original line number Diff line number Diff line
@@ -115,6 +115,42 @@ return [
            //    'givenName',
            //    'supannEtuId|supannEmpId',
            //],

            /**
             * Configuration de la stratégie d'extraction d'un identifiant utile parmi les données d'authentification
             * shibboleth.
             * Ex: identifiant de l'usager au sein du référentiel établissement, transmis par l'IDP via le supannRefId.
             */
            'shib_user_id_extractor' => [
                // domaine (ex: 'unicaen.fr') de l'EPPN (ex: hochonp@unicaen.fr')
//                'unicaen.fr' => [
//                    [
//                        // nom du 1er attribut recherché
//                        'name' => 'supannRefId', // ex: '{OCTOPUS:ID}1234;{ISO15693}044D1AZE7A5P80'
//                        // pattern éventuel pour extraire la partie intéressante
//                        'preg_match_pattern' => '|\{OCTOPUS:ID\}(\d+)|', // ex: permet d'extraire '1234'
//                    ],
//                    [
//                        // nom du 2e attribut recherché
//                        'name' => 'supannEmpId',
//                        // pas de pattern donc valeur brute utilisée
//                        'preg_match_pattern' => null,
//                    ],
//                    [
//                        // nom du 3e attribut recherché
//                        'name' => 'supannEtuId',
//                    ],
//                ],
                // config de repli pour tous les autres domaines
                'default' => [
                    [
                        'name' => 'supannEmpId',
                    ],
                    [
                        'name' => 'supannEtuId',
                    ],
                ],
            ],
        ],

        /**
+5 −4
Original line number Diff line number Diff line
@@ -28,11 +28,11 @@ class LocalAdapterFactory

        // db adapter
        if (array_key_exists('db', $localConfig)) {
            $this->attachSubAdapter($localAdapter, $container, $localConfig['db']);
            $this->attachSubAdapter($localAdapter, $container, $localConfig['db'], 20); // en 1er
        }
        // ldap adapter
        if (array_key_exists('ldap', $localConfig)) {
            $this->attachSubAdapter($localAdapter, $container, $localConfig['ldap']);
            $this->attachSubAdapter($localAdapter, $container, $localConfig['ldap'], 10); // en 2e
        }

        return $localAdapter;
@@ -42,8 +42,9 @@ class LocalAdapterFactory
     * @param LocalAdapter $localAdapter
     * @param ContainerInterface $container
     * @param array $config
     * @param int $priority
     */
    private function attachSubAdapter(LocalAdapter $localAdapter, ContainerInterface $container, array $config)
    private function attachSubAdapter(LocalAdapter $localAdapter, ContainerInterface $container, array $config, int $priority)
    {
        $enabled = isset($config['enabled']) && $config['enabled'] === true;
        if (! $enabled) {
@@ -52,7 +53,7 @@ class LocalAdapterFactory

        /** @var AbstractAdapter $subAdapter */
        $subAdapter = $container->get($config['adapter']);
        $subAdapter->attach($localAdapter->getEventManager());
        $subAdapter->attach($localAdapter->getEventManager(), $priority);
    }

}
 No newline at end of file
+12 −0
Original line number Diff line number Diff line
@@ -47,6 +47,18 @@ class ShibUser implements UserInterface
     */
    protected $state = 1;

    /**
     * Retourne la partie domaine DNS de l'EPPN.
     * Retourne par exemple "unicaen.fr" lorsque l'EPPN est "tartempion@unicaen.fr"
     *
     * @return string
     */
    public function getEppnDomain()
    {
        $parts = explode('@', $this->getEppn());

        return $parts[1];
    }

    /**
     * @return string
Loading