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.

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éboguage 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.

"Incorrect XML"

Ce message apparaît au chargement du Manager lorsque celui-ci n'arrive pas à charger la configuration. Dans ce cas, consultez les journaux d'Apache : la véritable erreur y sera enregistrée.

"Byte order is not compatible" ou "Magic number checking on storable string failed"

Ce message apparaît lorsque la configuration stockée est malformée ou sur les versions antérieures à la version 0.8.2.3 lorsqu'on utilise Lemonldap::NG sur des serveurs de type différents (32 et 64 bits en particulier). Dans ce dernier cas, il suffit d'installer une version au moins égale à la version 0.8.2.3.

"Configuration is in old format, you've to migrate !"

Ce message d'avertissement apparaît lorsqu'une configuration générée à partir d'une version antérieure à la 0.8.2.3 est lue par une version plus récente. Un simple réengistrement de la configuration par le manager fait disparaître cet avertissement.

"My::Package: get configuration 1"

Ce message de déboguage montre qu'un des processus fils d'Apache charge la configuration.

"My::Package: store configuration 1"

Ce message de déboguage montre qu'un des processus fils d'Apache enregistre la dernière version de la configuration dans le cache local. Elle sera lue par les autres fils d'Apache dans les 10 minutes qui suivent.

"My::Package: No cookie found"

Ce message indique qu'un utilisateur non authentifié se présente sur l'application.

"Redirect <x.x.x.x> to portal (url was /)"

Message de déboguage indiquant que le client correspondant à l'adresse IP est redirigé vers le portail d'authentification.

"Found a CDA id. Redirecting"

Message de déboguage indiquant que le client a été authentifié dans un autre domaine (mécanisme CDA). L'agent génère alors le cookie dans le nouveau domaine.

"User someone was authorizated to access to /"

Message de déboguage indiquant que le client est autorisé à accéder à cette URL.

"My::Package: removing cookie"

Message de déboguage indiquant que l'agent retire le cookie après l'avoir exploité : les applications n'ont pas à connaître ce cookie mais ne se fient qu'aux en-têtes.

"Error while reading configuration with globalStorageOptions key:"

Une erreur a été relevée dans la configuration.

"User rejected because VirtualHost test.example.com has no configuration"

Lorsqu'un VirtualHost est protégé mais pas configuré, Lemonldap::NG le bloque. Inscrivez alors ce VirtualHost dans la configuration de Lemonldap::NG.

"The cookie xxxx isn't yet available: Object does not exist in the data store at /usr/share/perl5/Apache/Session/Store/File.pm line 90.n"

Ce message apparaît lorsqu'un utilisateur présente un cookie qui n'existe pas ou plus dans la base des sessions. Il est alors prié de se ré-authentifier.

"The cookie xxxx isn't yet available: <erreur du module Apache::Session>

Ce message apparaît lorsque l'agent n'arrive pas à atteindre la base des sessions. La véritable erreur est reportée.