Présentation

LemonLDAP::NG est en WebSSO (Single Sign On) modulaire basé sur les modules Apache::Session. Il simplifie la construction d'une aire protégée avec peu d'impact sur les applications.

Il gère à la fois les authentifications et les autorisations et fournit des en-têtes HTTP pour la traçabilité. Vous vouvez ainsi avoir une protection AAA complète pour votre espace web tel qu'indiqué ci-dessus.

Architecture

Composants principaux

Bases de données

Nous appelons “base de données” un dispositif dans lequel nous pouvons lire et écrire des données. This can be a file, an LDAP directory, …

Nous scindons les bases de données en deux catégories :

Les principales bases de données externes sont :

Les principales bases de données internes sont :

Cinématique

login

  1. Lorsqu'un utilisateur tente d'accéder à une application protégée, il est intercepté par l'agent (handler)
  2. Si le cookies SSO n'est pas détecté, l'agent redirige l'utilisateur vers le portail
  3. L'utilisateur d'authentifie sur le portail
  4. Le portail examine les données d'authentification
  5. Si l'authentication est acceptée, le portail récupère les données de l'utilisateur
  6. Le portail crée une session et y stocke les données
  7. Le portail récupère la clef de session
  8. Le portail crée le cookie SSO avec la clef de la session comme valeur
  9. L'utilisateur est redirigé vers l'application demandée avec son nouveau cookie
  10. L'agent récupère la session en utilisant la valeur du cookie
  11. Il stocke ces données dans son cache
  12. L'agent vérifie les droits d'accès à l'application et envoie des en-têtes HTTP à l'application protégée
  13. L'application protégée renvoie sa réponse à l'agent
  14. Celui-ci la renvoie à l'utilisateur

Handler will then check SSO cookies for each HTTP request.

Déconnexion

Cas général:

  1. L'utilisateur clique sur le bouton déconnexion du portail
  2. Le portail détruit la session et redirige l'utilisateur sur lui-même avec un cookie SSO vide
  3. L'utilisateur est redirigé vers le portail et son cookie SSO est vide

LemonLDAP::NG peut également intercepter les requêtes de déconnexion des applications protégées, avec différent comportements :

Après déconnexion, l'utilisateur est redirigé vers une URL configurée ou vers le portail.

Expiration des sessions

The session expires after 20 hours by default.

  • Les agents disposent d'un cache de session d'une durée de vie par défaut de 10 minutes. Ainsi pour les agents installés sur des serveurs physiquement différent de celui hébergeant le portail, un utilisateur dont la session a expiré peut toujours être autorisé jusqu'à expiration du cache.
  • Les sessions sont effacées par des tâches planifiées. N'oubliez pas d'installer les fichiers cron !

Authentification inter-domaines (CDA)

Pour des raisons de sécurité, un cookie fournit par un domaine ne peut être transmit à un autre. Pour étendre le SSO sur plusieurs domaines, un mécanisme inter-domaines est intégré à LemonLDAP::NG.

  1. L'utilisateur dispose d'un cookie SSO dans le domaine principal (voir la cinématique de connexion)
  2. L'utilisateur tente d'accéder à une application protégée d'un autre domaine
  3. L'agent n'intercepte pas de cookie SSO (car il n'est pas dans le même domaine) et redirige l'utilisateur vers le portail
  4. Le portail reconnaît l'utilisateur par son cookie SSO et voit qu'il sollicite une application d'un domaine différent
  5. Portal redirige l'utilisateur vers l'application demandée avec son identifiant de session en paramètre de l'URL
  6. L'agent détecte le paramètre d'URL et crée le cookie SSO dans son domaine, avec la valeur de l'identifiant de session

Mécanismes d'authentification, d'autorisation et de traçabilité (AAA)

Authentification

Si un utilisateur n'est pas authentifié et tente de se connecter à une application protégée par un agent compatible LemonLDAP::NG, il est redirigé vers le portail.

Les étapes du processus d'authentication sont :

Les cookies SSO de LemonLDAP::NG sont générés par Apache::Session, ils sont aussi sûrs que tout cookie basé sur un aléa de 128 bits. Vous devriez utilisez les options securedCookie pour éviter le vol de session. (since version 1.4.0 you can use SHA256 for generating safer cookies)

Autorisations

Les autorisations sont vérifiées seulement par les agents (handlers). Une autorisation est définie pas :

Les autorisations sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Il n'y a pas d'autorisation globale, à l'exception de la règle accordant l'ouverture de session dans le portail.

Les valeurs des règles d'accès peuvent être :

Quelques exemples:

\b means start or end of a word in PCRE (Perl Compatible Regular Expressions)

Voir le chapître Écrire les règles et en-têtes.

Traçabilité

Trace des authentification

Le portail génère un message de niveau notice dans les journaux d'Apache ou dans syslog lorsqu'un utilisateur d'authentifie (ou échoue) ou se déconnecte.

Trace des accès aux applications

L'agent fournit à Apache l'identifiant de l'utilisateur (paramètre whatToTrace), ainsi vous pouvez voir l'identifiant dans les journaux d'accès d'Apache.

La réelle traçabilité doit être faite par l'application elle-même car les journaux du SSO ne peuvent interprêter les transactions.

LemonLDAP::NG peut exporter des en-têtes HTTP qu'on l'utilise sur une reverse-proxy ou directement sur le serveur à protéger

An HTTP header is defined by:

Les en-têtes sont définies à l'intérieur d'un hôte virtuel (virtualhost) et n'ont d'effet que sur lui. Il n'y a pas d'en-tête global.

The header value is a Perl expression, returning a string.

Quelques exemples:

Voir Écrire les règles et en-têtes pour plus d'informations.