# documentation:2.0:authmulti
Keywords: documentation,2.0,authmulti

# Empiler de multiples backends

Authentification | Utilisateurs | Mot-de-passe
--- | --- | ---
✔ | ✔ |

## Présentation

Ce backend permet de chaîner des méthodes d'authentification, par exemple pour basculer sur une authentification LDAP si l'authentification amont a échouée…

## Configuration

Il faut utiliser `Multiple` comme module d'authentification (celà force `Multiple` pour le module utilisateur). Aller ensuite dans les `paramètres Multiple` pour définir les modules à chaîner pour l'authentification et les utilisateurs. Les modules doivent être séparés par point-virgules/

Par exemple :

    CAS;LDAP

Si CAS échoue, LDAP est utilisé.

Il est possibe d'ajouter une condition. Exemple :

    Remote $ENV{REMOTE_ADDR}=~/^192/;LDAP $ENV{REMOTE_ADDR}!~/^192/'

Multiple essaiera d'utiliser le même module pour l'authentification et les utilisateurs. Exemple, en utilisant “`DBI;LDAP`”, si DBI échoue pour l'authentification, Multi essaie d'utiliser LDAP comme base d'utilisateurs.

### Configuration avancée

Le système `Multiple` peut :

- empiler plusieurs fois le même module avec un nom différent
- surcharger n'importe quel paramètre LL::NG en fonction du backend utilisé

La surcharge n'est pas paramètrable dans le manager

Pour empiler plusieurs fois le même module, utiliser ”#nom” avec différents noms. Exemple :

    LDAP#Openldap; LDAP#ActiveDirectory

Ensuite on peut avoir différents paramètres pour chacun, stockés dans une table de hachage <a1>Perl</a1> nommée multi :

    multi => {
        'LDAP#Openldap' => {
          'ldapServer' => 'ldap1.example.com',
          'LDAPFilter' => '(uid=$user)',
        },
        'LDAP#ActiveDirectory' => {
          'ldapServer' => 'ldaps://ad.example.com',
          'LDAPFilter' => '(&(sAMAccountName=$user)(objectClass=person))',
        }
    },

Cette clef doit être stockée directement dans lemonldap-ng.ini :

    [portal]
    multi = {'LDAP#Openldap'=>{'ldapServer'=>'ldap1.example.com','LDAPFilter'=>'(uid=$user)'},'LDAP#ActiveDirectory'=>{'ldapServer'=>'ldaps://ad.example.com','LDAPFilter'=>'(&(sAMAccountName=$user)(objectClass=person))'}}

## Problèmes connus

### Authentification AuthApache

En utilisant ce module, le portail LL::NG est appelé uniquement si Apache ne retourne pas “401 Authentication required”, aucune bascule n'est donc possible.

Pour outrepasser ceci, suivre la documentation du module AuthApache

### Authentification SSL

Pour chaîner SSL, il est nécessaire de mettre “SSLRequire optional” dans le fichier de configuration Apache, sinon les utilisateurs ne seront authentifiés que par SSL.