Table des matières

SSO CAS

Installation

L'installation est facilement réalisable à l'aide du packet cas-toolbox téléchargeable ici et documenté ici. L'installation sera réalisé dans entièrement à l'aide d'un utilisateur POSIX cas dédié.

La configuration de cas-toolbox sera conservée dans un repos git (local) situé dans le dossier /home/cas/local.

Toute modification de la configuration du CAS devront être faite en tant qu'utilisateur cas. Celui-ci disposera des droits sudo pour le déploiement en production et le redémarrage de Tomcat.

Arborescence du home de l'utilisateur cas

/home/cas
  |- upstream : les sources logicielles téléchargées
  |- cas-toolbox-XXXXXX : les différentes versions de cas-toolbox présentes sur le serveur
  |- current : lien symbolique vers les sources de la version courante de cas-toolbox
   |- build.properties : fichier de configuration de la compilation
   |- config.properties : fichier de configuration de CAS
   |- custom : dossier de personnalisation de l'installation du CAS
   |- build : dossier de compilation du CAS
  |- local : repos GIT de personnalisation de l'application CAS
   |- static : données web statiques
  |- webapps : lien symbolique pointant sur le répertoire des webapps de Tomcat
    |- cas : Répertoire de déploiement de CAS

Dépendances

Cette application a pour dépendance les paquets Debian suivants :

Configuration de Tomcat

Configuration d'Apache

Exemple de VirtualHost Apache
<VirtualHost *:80>
    ServerAdmin webmaster@exemple.fr
    ServerName connexion.exemple.fr

    RedirectMatch / https://connexion.exemple.fr

    ErrorLog /var/log/apache2/connexion.exemple.fr.error.log
    CustomLog /var/log/apache2/connexion.exemple.fr.access.log combined
</VirtualHost>


<VirtualHost *:443>
    ServerAdmin webmaster@exemple.fr
    ServerName connexion.exemple.fr

    DocumentRoot /var/www/empty

    Alias /static /home/cas/local/static

    <Directory /home/cas/local/static>
        Options -Indexes
    </Directory>

    RedirectMatch ^/$ /cas/

    SSLEngine On

    ProxyRequests Off
    <Proxy *>
        Order Deny,Allow
        Allow From All
    </Proxy>

    ProxyPass /cas ajp://127.0.0.1:8009/cas retry=2

    ErrorLog /var/log/apache2/connexion.exemple.fr.error.log
    CustomLog /var/log/apache2/connexion.exemple.fr.access.log combined
</VirtualHost>

Configuration de sudo

Configuration de memcached

Il n'y a pas de modification à apporter à la configuration standard du service.

Configuration

Vous pouvez utiliser comme base la configuration présente dans le repos cas-common-config. Votre configuration devra se trouver dans le dossier /home/cas/local.

Adapter le contenu du fichier config.properties et notamment les variables suivantes :

Un service CAS est normalement toujours derrière une connexion sécurisé (HTTPS). Si jamais, pour une raison que vous appartient, vous décider d'installer un service CAS derrière une connexion non-sécurisé (HTTP) il faudra modifier la configuration du générateur de cookie pour qu'il n'oblige pas les connexions sécurisées. Pour cela, copier le fichier build/cas/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml dans le dossier custom/webpages/WEB-INF/spring-configuration (à créé au préalable) et modifier le paramètre p:cookieSecure dans ce fichier comme suit :
[...]
        <bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
                p:cookieSecure="false"
                p:cookieMaxAge="-1"
                p:cookieName="CASTGC"
[...]

Déploiement

Il semble que les dépôts Maven utiliser pour le build du serveur CAS est changé, rendant impossible les nouveaux déploiements. Cela ne pose cependant pas de problème au ancien déploiement qui dispose d'un cache local des dépendances. Une solution simple (mais crade) de contourner se problème est de récupérer le cache d'un serveur CAS préalablement déployé : il s'agit du dossier current/build/maven-repository. Vous pouvez aussi télécharger l'archive suivante qui contient le dossier maven-repository.

Re-déploiement

Un re-déploiment permet de prendre en compte les modifications faites sur la configuration du serveur Git.

Cette procédure n'est pas nécessaire pour les données statiques (dossier /local/static).

Pour cela, il faut :

Services autorisés à utilisé l'authentification CAS

CAS contrôles les services qui sont autorisés à utiliser son service de SSO. La liste des services autorisés au configurés dans le fichier custom/webpages/WEB-INF/deployerConfigContext.xml. Par défaut, le service autorise les services suivants :

http://**
https://**
imap://**
imaps://**
Seul les services HTTP/HTTPS ont cepandant accès aux attributs CAS.

Il est possible d'ajouter des nouveaux services autorisés lorsque le service est démarré en utilisant l'interface https://login.example.fr/cas/services/manage.html. Il faudra pour cela se connecté avec un utilisateur reconnu comme ADMIN du service (cf. paramètre security.useradmin).

Attention : Les ajouts fait par ce biais ne sont pas conservé lors du redémarrage du service.

Problème de la déconnexion générale (Single-Sign-Out)

Pour bien comprendre le problème, mieux vaut l'expliquer complètement :

Dans le cas d'un accès à une application (authentifié par Apache) via une application de type portail (gérant sa propre connexion SSO), l'utilisateur dispose donc normalement d'au moins quatre sessions :

Pour déconnecter l'utilisateur proprement, il faut :

Dans le cas d'une authentification géré par Apache via le module mod_auth_cas, la déconnexion n'est pas gérée correctement. En outre, il est possible pour l'application authentifiée par Apache gère la suppression du cookie du module mod_auth_cas d'Apache en plus du sein au moment de la déconnexion.

Un autre critère est à prendre en compte par ailleurs : lors de la déconnexion d'un utilisateur au niveau d'une application, celle-ci clos sa session avant de rediriger l'utilisateur vers la déconnexion du niveau du portail SSO. Cependant, si l'utilisateur était connecté auprès d'une autre application, la déconnexion auprès de celle-ci n'est pas gérée si l'application ne supporte pas le mécanisme de Single-Sign-Out (ce qui est le cas de la plupart des applications utilisant le protocole CAS). Pour ce problème, il existe cependant une solution :

Il est à noter cependant que cette solution n'est pas idéale car si l'utilisateur ferme l'onglet de son navigateur durant le temps de chargement de la page intermédiaire de déconnexion, il ne sera pas bien déconnecté.