# Backend de session explorable

## Présentation

Le backend de session explorable (Apache::Session::Browseable) fonctionne exactement comme le module Apache::Session::* correspondant mais ajoute des index qui améliore les performances de l'explorateur de session et les restrictions de sessions.

Lorsqu'on utilise des fonctionnalités telles SAML (authentification ou fournisseur d'identité), CAS (fournisseur d'identité) ou le service de réinitialisation de mots-de-passe, il faut également indexer quelques champs.

Sans index, LL::NG doit récupérer toutes les sessions stockées dans le backend et les examiner pour trouver les sessions demandées. Avec index, LL::NG ne récupère que les sessions demandées.

Le tableau suivant liste les champs à indexer suivant les fonctionnalités dont on souhaite améliorer les performances :

Fonctionnalité | Champs à indexer
--- | ---
Explorateur de sessions | ipAddr WHATTOTRACE
Session explorer (persistent sessions) | _session_uid
Resctriction d'ouverture de session | ipAddr WHATTOTRACE
Authentification ou fourniture d'identité SAML | _saml_id ProxyID _nameID _assert_id _art_id _session_id
Fourniture d'identité CAS | _cas_id
Réinitialisation de mots-de-passe | user

WHATTOTRACE doit être remplacé par l'attribut ou la macro configurée dans le paramètre indiquant le champ utilisateur à stocker dans les journaux (REMOTE_USER)
Il est préférable d'utiliser des bases de sessions séparées pour les sessions standard, SAML et CAS afin de gérer séparemment les index.
La documentation ci-dessous explique comment fixer les index à ipAddr et _whatToTrace. À adapter pour configurer les index voulus.

## Browseable NoSQL

Il est possible d'utiliser Redis comme expliqué dans Backend de sessions Redis.

Il suffira juste d'ajouter le paramètre `Index` dans `Paramètres généraux` » `Sessions` » `Stockage des sessions` » `Module Apache::Session` :

Paramètres exigés
Nom | Commentaire | Exemple
--- | --- | ---
server | Serveur Redis | 127.0.0.1:6379
Index | Index | _whatToTrace ipAddr

## Browseable SQL

Cette documentation est construite autour de MySQL. Quelques adaptations sont nécessaires pour les autres bases de données.

### Préparer la base de données

La base de donnée doit être préparée exactement comme celle du backend de session SQL si ce n'est qu'un champ doit être ajouté pour chaque donnée à indexer.

    CREATE TABLE sessions (
        id CHAR(32) NOT NULL PRIMARY KEY,
        a_session BLOB,
        _whatToTrace VARCHAR(255),
        ipAddr VARCHAR(15),
        KEY _whatToTrace (_whatToTrace),
        KEY ipAddr (ipAddr)
        );

Changer char(32) en char(64) pour utiliser l'algorithme de hashage SHA256 (recommandé). Voir Sessions pour plus de détails

### Manager

Aller dans le manager et mettre le module de session (Apache::Session::Browseable::MySQL pour MySQL) dans `Paramètres généraux` » `Sessions` » `Stockage des sessions` » `Module Apache::Session` et ajouter le paramètre suivant (sensible à la casse) :

Paramètres exigés
Nom | Commentaire | Exemple
--- | --- | ---
DataSource | La chaîne DBI | dbi:mysql:dbname=sessions
UserName | Le login de la base de données | lemonldapng
Mot-de-passe | Le mot de passe de la base de données | mysuperpassword
Index | Index | _whatToTrace ipAddr

Apache::Session::Browseable::MySQL n'utilise pas les locks pour conserver les performances.

Pour les bases de données telles PostgreSQL, ne pas oublier d'ajouter “Commit” avec une valeur de 1

## Browseable LDAP

Aller dans le manager et mettre le module de session à `Apache::Session::Browseable::LDAP` Configurer ensuite les options comme dans le backend de sessions LDAP.

Il faut ajouter le champ `Index`, on peut aussi configurer le champ `ldapAttributeIndex` pour indiquer le nom d'attribut dans lequel les index doivent être stockés.

Paramètres exigés
Nom | Commentaire | Exemple
--- | --- | ---
ldapServer | URI du serveur | ldap://localhost
ldapConfBase | DN de la branche des sessions | ou=sessions,dc=example,dc=com
ldapBindDN | Login de connexion | cn=admin,dc=example,dc=password
ldapBindPassword | Mot-de-passe de connexion | secret
Index | Liste d'index | _whatToTrace ipAddr
Paramètres optionnels
Nom | Commentaire | Valeur par défaut
ldapObjectClass | Objectclass de l'entrée | applicationProcess
ldapAttributeId | Attribut où stocker l'idetifiant de session | cn
ldapAttributeContent | Attribut où stocker le contenu de la session | description
ldapAttributeIndex | Attribut où stocker les index | ou

## Sécurité

Restreindre l'accès réseau au backend.

On peut utiliser différent login/mot-de-passe pour les serveurs en surchargeant les paramètres `globalStorage` et `globalStorageOptions` dans le fichier lemonldap-ng.ini.