Single Sign-On (SSO) avec CAS

Dimanche 25 janvier 2009 par dominique
Posté dans Debian, Technique, Web

loginComme de souvent, c’est pour un projet en cours que je suis amené à m’intéresser aux solutions de SSO et donc de rédiger cet article.

Qu’est-ce que le SSO ou Single Sign-On ?

Il s’agit d’une technique permettant à un utilisateur de ne procéder qu’à une seule authentification pour accéder à plusieurs applications informatiques sécurisées (généralement des sites Web).  Souvent dans une entreprise, les utilisateurs sont amenés à s’identifier dans différentes applications (intranet, courrier électronique, forums, agendas, …). Sans solution de SSO, il est nécessaire de s’identifier dans chacune de ces applications avec souvent des identifiants différents.

On trouve des articles qui expliquent le principe et les bienfaits du SSO sur Wikipédia en Français et en Anglais (articles complémentaires).

CAS une solution open source

Dans le cadre du projet en question, le but est d’intégrer une application PHP à CAS (Central Authentication Service) une solution de SSO open source développée à l’origine par l’université de Yale puis reprise par JA-SIG. Le site officiel de CAS par JA-SIG est ici.

L’université de Rennes à l’occasion de la mise en place de CAS a élaboré un document très complet sur le fonctionnement de CAS et notamment le dialogue entre le serveur SSO (CAS) et l’application cliente (l’application Web).

Les applications s’intègrent à CAS soit au niveau applicatif au moyen de librairies disponibles pour différents langages (PHP, ASP, C, Java, …), soit directement au niveau d’un serveur Web (module Apache pour CAS).

Ces Librairies ou modules Apache sont appelés clients CAS. En voici une liste disponible sur le site JA-SIG.

De son coté, le serveur CAS s’interface avec un annuaire existant ou mis en place pour l’occasion (annuaire LDAP par exemple).

Pour réaliser le codage et les tests d’intégration d’une application avec CAS, il faut donc :

  • Installer un serveur CAS qui va s’interfacer avec un annuaire existant.
  • Un client CAS

Mise en oeuvre de CAS

J’ai procédé à l’installation d’un serveur CAS que j’ai interfacé avec une simple base MySQL contenant les noms et mots de passe des utilisateurs. Puis j’ai intégré l’appel au serveur CAS dans des pages PHP.

Voici les étapes de cette mise en oeuvre et des liens vers les tutoriels que j’ai suivis.

Installation du serveur CAS sous Debian

CAS est une application Java nécessitant un serveur d’application tel que Jetty, Tomcat, …

Voici un tutoriel qui explique l’installation complète de Java, Tomcat et de CAS sur un serveur Debian 4.0 Etch. Vérifiez si des versions plus récentes des différents composants sont disponibles. Bizarrement, ce tutoriel passe sous silence certains pré-prequis. Il s’agit de :

  • Installer le JSDK 1.5 ou 1.6 de SUN sous Debian. Pour cela, vous aurez sans doute besoin de configurer les dépots APT. Voici un article que j’ai écris à ce sujet.
  • Installer OpenSSL sous Debian. Pour cela, exécuter la commande suivante (sous le compte root ou en sudo) : apt-get install openssl
  • Configurer Tomcat pour supporter le mode SSL (protocole https), qui est impératif pour une bonne sécurisation des échanges avec CAS. Pour cela, vous pouvez vous référer à ce tutoriel ou cette page de la documentation Tomcat

Intégration des appels CAS dans un application PHP

Pour cette intégration, j’ai utilisé la librairie phpCAS. Cette page du site JA-SIG est la documentation officielle avec tous les exemples nécessaires.

Intégration de CAS au niveau du serveur WEB Apache

Avec une intégration directement au niveau sur serveur Web Apache, ce n’est plus l’application Web qui est en charge de dialoguer avec le serveur CAS, mais directement le serveur Apache. L’application Web récupère l’identité de l’utilisateur dans les variables d’environnements du serveur Apache.

J’ai essayé de mettre en oeuvre cette solution mais je n’y suis pas parvenu car les informations que l’on trouve sur le sujet sont incomplètes, contradictoires ou obsolètes. Toutefois, ce que je peux mentionner est qu’il existe 2 modules CAS pour Apache : mod_cas qui semble obsolète et mod_auth_cas qui est la solution indiquée par JA-SIG.

De la documentation sur mod_cas est disponible ici (ESUP) et ici (JA-SIG).

De la documentation sur mod_auth_cas est disponible ici (JA-SIG).

Dans certaines de ces documentation, il est demandé de compiler les sources des modules. Il n’est pas mentionné qu’il faut disposer de différents outils et librairies de développement sous Debian. Pour les installer, il faut exécuter les commandes suivantes (sous le compte root ou en sudo) :

sudo apt-get install gcc g++ make

sudo apt-get install apache-dev apache2-threaded-dev

sudo apt-get install kernel-package




 
 

Vous pouvez suivre les commentaires à ce message au travers du flux RSS 2.0 . Vous pouvez laisser un commentaire, ou placer un trackback depuis votre propre site.

3 résponses à “Single Sign-On (SSO) avec CAS”

  1. Bon sujet, cette mise en oeuvre est souvent abordée lors de l’utilisation d’un moteur de recherche. Le processus d’intégration est a priori long, est ce parce qu’il faut faire une action pour chaque applicatif gérant des droits ?

  2. Le temps d’intégration à un applicatif peut être variable. Trés rapide lorsqu’il s’agit juste de savoir si l’utilisateur est autorisé. Dans ce cas l’application n’a pas sa propre base d’utilisateurs avec des profils mais demande juste au système de SSO de valider l’autorisation.
    Plus long si il s’agit de valider l’autorisation, puis de rapprocher l’identifiant fournit par le système de SSO à un profil stocké en base par l’applicatif en vu d’initialiser un environnent de travail propre à l’utilisateur.

  3. Bonjour,

    en effet, je passe sous silence les dépôts nécessaires à java (contrib et non-free il me semble). J’ai tellement le reflexe de les ajouter que je les oublie dans 99% des cas :).

    Pour ce qui est de HTTPS, je le passe sous silence car ce n’est pas Tomcat qui gère le HTTPS dans mon cas. J’ai pour habitude d’utiliser un reverse proxy Apache 2 devans mes services web, car cela me simplifie la gestion des ports :) Ainsi, je peut utiliser des applications PHP en complément de CAS sur le port HTTPS :D, tout en n’ayant qu’une seule IP.

    Merci pour le lien dans tous les cas.

    Lone Wolf

Ajouter un commentaire

A propos

Je suis informaticien indépendant. J'interviens principalement dans les domaines de la gestion documentaire et des moteurs de recherches. Ce blog me permet de partager des informations techniques decouvertes au cours de mes différents projets ou lors de mes lectures sur le Web.

Dominique - www.eolya.fr

Optimisez la lecture de vos blogs et sites d'information préférés

Crossfeeds est un service Web de mixage et de filtrage de flux RSS. Crossfeeds dispose d'une base de 600.000 flux et offre des fonctionnalités de recherche dans les flux et d'alertes par emails.

http://www.crossfeeds.fr/