Foire aux questions Lemonldap::NG

Lemonldap::NG

Qu'est-ce qu'un Web-SSO ?

Un SSO (Single Sign On) est un dispositif qui permet de partager les authentifications entre plusieurs applications. L'utilisateur ne s'authentifie ainsi qu'une fois et n'est pas interrompu lorsqu'il change d'application. Kerberos (utilisé dans Active Directory) par exemple est un SSO. Le problème de ces systèmes est qu'outre leur lourdeur, ils ne s'appliquent qu'à des Intranets sur des machines relativement homogènes.

Le Web-SSO est le portage de ce principe restreint aux applications Web. L'utilisateur est donc authentifié au premier accès à une application web protégée et les authentifications se propagent lorsqu'il change d'application. Le gros avantage est alors que le système est utilisable sur Internet sans pré-requis sur les postes clients (il suffit d'accepter les cookies de session). Par exemple, lorsqu'un utilisateur accède à une boîte-aux-lettres Google, il n'est pas réauthentifié s'il accède à l'application de gestion des groupes ou tout autre application Google.

Lemonldap::NG est un des systèmes permettant la gestion du Web-SSO.

Qu'apporte Lemonldap::NG par rapport aux autres SSO ?

Configuration

Quel système de stockage de configuration choisir ?

Lemonldap::NG fournit 3 types de stockage de configuration:

L'exemple fourni fonctionne en HTTP, mais pas en HTTPS.

Dans le mécanisme des redirections vers le portail puis vers le site protégé, il faut indiquer à l'agent (handler) s'il est de type HTTPS ou non. Ceci est fait par le paramètre https qui doit être mis à 1. Ce paramètre n'est pas accessible dans la configuration (manager), car il est spécifique aux hôtes virtuels. C'est donc lors de l'appel à la fonction init (dans le fichier My::Package) qu'il doit être renseigné:

__PACKAGE__->init ( {
    localStorage        => "Cache::FileCache",
    localStorageOptions => {
              'namespace'          => 'MyNamespace',
              'default_expires_in' => 600,
              'directory_umask'    => '007',
              'cache_root'         => '/tmp',
              'cache_depth'        => 5,
    },
    configStorage       => {
              type                 => 'File',
              dirName              => '/var/lib/lemonldap-ng/conf',
    },
    https               => 1,
} );

A quoi sert le paramètre https du handler ?

Ce paramètre n'est utilisé que dans les redirections vers le portail d'authentification. Il sert juste à indiquer à ce dernier qu'après authentification, l'utilisateur doit être redirigé vers l'application en https et non en http.

Qu'est ce qu'une CGI auto-protégée ?

Lorsqu'on a qu'une seule page Perl à protéger dans un VirtualHost, plutôt que de la protéger en utilisant un agent Lemonldap::NG dans Apache, on peut utiliser une CGI auto-protégée:

  use Lemonldap::NG::Handler::CGI;
  my $cgi = Lemonldap::NG::Handler::CGI->new ( {
      # mêmes paramètres qu'un agent Lemonldap::NG::Handler::SharedConf
    }
  );
  $cgi->authenticate;

Dans l'exemple ci-dessus, $cgi est un objet de type CGI(3). La seule différence est qu'il bénéficie de quelques fonctions supplémentaires: Ce type de CGI est très utile lorsque les droits ne peuvent être distingués par URL (requêtes POST par exemple). La page de manuel Lemonldap::NG::Handler::CGI(3) détaille son utilisation.

Comment faire fonctionner Lemonldap::NG avec un annuaire Active-Directory ?

Active-Directory utilise le champ cn comme identifiant unique au lieu de uid. Il faut donc modifier la configuration de Lemonldap::NG en deux points :
  1. la recherche de l'utilisateur dans l'annuaire doit être effectuée avec le champ cn (ou samAccountName),
  2. les journaux d'Apache doivent être enrichis avec ce même champ.
Pour le deuxième point, la modification est très simple : il faut remplacer $uid par $cn dans le champ "Paramètres généraux -> Donnée à inscrire dans les journaux d'Apache" (et vérifier que cette variable est déclarée dand les attributs à exporter). Le changement de filtre de recherche nécessite la surcharge d'une méthode dans le portail. Cette modification peut être effectuée comme suit:
#!/usr/bin/perl
use Lemonldap::NG::Portal::SharedConf;
my $portal = Lemonldap::NG::Portal::SharedConf->new(
    {
        configStorage => {
            type    => 'File',
            dirName => '/var/lib/lemonldap-ng/conf',
        },
        formateFilter => sub {
            my $self = shift;
            $self->{filter} = "(&(cn=" . $self->{user} . ")(objectClass=person))";
            PE_OK;
        } # fin de la surcharge
    }
);

Comment utiliser Lemonldap::NG en reverse-proxy ?

Lemonldap::NG protège simplement les VirtualHosts d'Apache. Pour fonctionner en reverse-proxy, il suffit donc de configurer Apache en reverse-proxy:

# httpd.conf
<VirtualHost *>
  ServerName monappli
  PerlRequire MyFile
  PerlHeaderParserHandler My::Package
  ProxyPass / http://serveur-reel/
  ProxyPassReverse / http://serveur-reel/
  # on peut aussi utiliser mod_rewrite
  # RewriteEngine On
  # RewriteRule /(.*)$ http://serveur-reel/$1 [P]
</VirtualHost>

Si toutefois vous préférez utiliser un proxy Perl, Lemonldap::NG en fournit un (Lemonldap::NG::Handler::Proxy(3)).

Fonctionnement

A quoi sert le cache local des agents (handlers) ?

Le cache local des agents a deux fonctions:

Pourquoi ne peut-on pas configurer le cache local des agents (handlers) dans la console d'administration ?

Le cache local doit être choisi ou paramétré en fonction du serveur: si on choisit par exemple le module Cache::FileCache, le répertoire de stockage n'est pas nécessairement le même partout. De plus, une modification du cache ne peut être appliquée sans redémarrage du serveur Apache contrairement aux autres paramètres gérés par la console d'administration.

Qu'est ce que le Cross Domain Authentication (CDA) ?

Le système de propagation de la session Lemonldap::NG est basé sur des cookies. Or ces cookies sont attachés au domaine dont ils sont issus. Lemonldap::NG fournit un dispositif permettant de passer outre ce problème: il suffit d'utiliser le portail Lemonldap::NG::Portal::CDA et les agents Lemonldap::NG::Handler::CDA sur les sites protégés en dehors du domaine du portail.

Comment fonctionne le Cross Domain Authentication (CDA) ?

Un portail Lemonldap::NG::Portal::CDA détecte si l'URL demandée n'est pas dans le même domaine. Si c'est le cas, il ajoute un paramètre à cette requête correspondant au cookie de session. Lorsque l'utilisateur est renvoyé vers cette URL, l'agent Lemonldap::NG::Handler::CDA reconnaît ce paramètre et génère alors le cookie dans son domaine. Il retire alors le paramètre ajouté par le portail et effectue le traitement normal de la requête.

Qu'est ce que le système de notifications

C'est un système permettant de notifier un message à un utilisateur lors de l'accès au portail. Si le message contient des cases à cocher, elles doivent toutes être cochées pour pouvoir ouvrir la session.

Authentification

Peut-on changer le mode d'authentification ?

Lemonldap::NG fournit plusieurs modes d'authentification (à paramétrer dans le champ "authentification" de l'interface d'administration) :

Messages d'erreur et de déboguage

Lemonldap::NG produit des messages de débogage et d'erreur enregistrés dans le journal d'Apache (error.log par défaut). Vous pouvez modifier le niveau d'affichage en adaptant le paramètre LogLevel d'Apache.

La page Erreurs référence ces messages d'erreur et de débogage.