Comment configurer l’authentification CAS
Pour commencer une authentification CAS nous devons aller sur la page du CAS pour voir les prérequis et les moyens de l’installer.
Nous travaillerons sur la version 6.0.x.
Les points suivants sont à connaître pour les prérequis :
- posséder Java dans la version 11, et pour cela on prendra OpenJDK
- posséder un “Servlet Containers”, c'est-à-dire installer un moteur pour lancer CAS au niveau du web, et pour cela nous allons installer Apache Tomcat
- prendre en considération les prérequis de la machine
On commence par OpenJDK
Afin d'installer OpenJDK 11 sur Ubuntu 16.04 il faut ouvrir le terminal afin d'exécuter les commandes suivantes :
sudo su
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install -y openjdk-11-jdk
Apache Tomcat
Avant d’installer Tomcat nous devons tout d'abord connaître la version à installer. Pour cela, nous devons nous rendre sur la page d'installation du CAS et poursuivre sur CAS Overlay en version 6.0. La version de Tomcat, se trouve dans le fichier “gradle.properties”, qui est actuellement “tomcatVersion = 9.0.14”.
Ensuite, sur le site d’Apache Tomcat, nous téléchargeons la version 9 de Tomcat puis nous cliquons sur le lien archives. Dans notre cas, nous voulons la version 9.0.14, le fichier pour télécharger Tomcat se trouve dans le dossier Bin/. Il se nomme apache-tomcat-9.0.14.tar.gz ou apache-tomcat-9.0.14.zip.
Afin d'installer Apache Tomcat 9.0.14 sur Ubuntu 16.04 nous devons ouvrir le terminal de manière à exécuter les commandes suivantes :
tar -xzf apache-tomcat-9.0.14.tar.gz ou unzip apache-tomcat-9.0.14.zip
cd apache-tomcat-9.0.14
Afin d'ajouter des utilisateurs Tomcat, nous devons accéder au fichier conf/tomcat-users.xml, puis ajouter :
<role rolename="admin-gui"/>
<user username="<utilisateur du host-manager>" password="<mot de pass>" roles="admin-gui"/>
<role rolename="manager-gui"/>
<user username="<utilisateur du manager>" password="<mot de pass>" roles="manager-gui"/>
Nous prenons pour notre exemple :
- username : “utilisateur1” et “utilisateur2”
- mot de passe : “pass1” et “pass2”
Une fois que tout cela mis en place, nous accédons au fichier conf/server.xml pour changer le port par défaut.
Pour l’exemple, nous utiliserons : port="8334"
Pour démarrer Tomcat nous allons nous servir du script ./bin/startup.sh. Notre accès à Tomcat est désormais fonctionnel à l’adresse http://localhost:8334 pour un utilisateur et à l'adresse http://localhost:8334/manager pour l'accès administrateur.
Afin d'arrêter Tomcat nous devons utiliser le script suivant : ./bin/shutdown.sh
Tomcat en tant que service :
sudo su
mv apache-tomcat-9.0.14/ opt/tomcat9.0.14
Pour limiter les droits à un seul utilisateur du groupe il faut modifier les droits sur le dossier Tomcat et donc créer un utilisateur et un groupe afin de limiter leurs droits. Pour l’exemple nous avons :
tomcat9.0.14 pour le dossier.
tomcat9014 pour l’utilisateur.
tomcat9 pour le groupe.
Les commandes sont les suivantes pour :
- Créer notre groupe :
groupadd tomcat9
- Créer notre utilisateur :
useradd -s /bin/false -g tomcat9 -d /opt/tomcat9.0.14 tomcat9014
- Avoir les bons droits :
cd /opt/tomcat9.0.14
chgrp -R tomcat9 /opt/tomcat9.0.14
chmod -R g+r conf/
chmod g+x conf/
chown -R tomcat9014 webapps/work/temp/logs/
- Enregistrer le service de Tomcat :
cd /etc/systemd/system
- En vue de faire fonctionner le service, nous devons ajouter dans le fichier tomcat9.0.14.service :
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat9.0.14/temp/tomcat9.0.14.pid
Environment=CATALINA_HOME=/opt/tomcat9.0.14
Environment=CATALINA_BASE=/opt/tomcat9.0.14
Environment=CATALINA_TMPDIR=/opt/tomcat9.0.14/temp
ExecStart=/opt/tomcat9.0.14/bin/startup.sh
ExecStop=/opt/tomcat9.0.14/bin/shutdown.sh
User=tomcat9014
Group=tomcat9
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
- De façon à redémarrer le systemd daemon et pouvoir utiliser de nouveau le service, nous devons ajouter :
systemctl daemon-reload
- Faire de même en vue de démarrer Tomcat :
systemctl start tomcat9.0.14
Nous constatons désormais que nous pouvons nous connecter sur notre navigateur avec l’adresse http://localhost:8334.
- Pour voir l’état du service Tomcat :
systemctl status tomcat9.0.14
- Pour arrêter Tomcat :
systemctl stop tomcat9.0.14
Installation du serveur CAS
En ce qui concerne l'installation du CAS Overlay que nous avons téléchargé, nous devons nous rendre sur le terminal pour entrer les commandes suivantes :
unzip cas-overlay-template-6.0.zip
mv cas-overlay-template-6.0 cas60X
cd cas60X/
Les fichiers de configuration se situent dans le dossier etc/ :
- Pour modifier les propriétés du CAS
/etc/cas/config/cas.properties
- Pour configurer les logs :
/etc/cas/config/log4j2.xml
Tout le développement se trouve dans le dossier src/.
- Afin de mettre les fichiers de configuration dans le bon endroit :
./build.sh copy
- Pour compiler le CAS :
./build.sh package
- Pour mettre le serveur CAS compilé dans Tomcat :
cp build/libs/cas.war /opt/tomcat9.0.14/webapps/
Ensuite, vous pouvez relancer le serveur Tomcat.
./opt/tomcat9.0.14/bin/startup.sh
- Successivement, vous pourrez ouvrir un nouvel onglet du navigateur avec l’adresse http://localhost:8334/cas.
- L’utilisateur de test par défaut est “casuser” avec le mot de passe “Mellon”.
Comment configurer Drupal avec une authentification CAS
Commençons par le principe que vous ayez déjà installé votre site Drupal. L’emplacement du site dans l’exemple sera : /var/www/demo_cas_server.
Il est nécessaire d'installer le module CAS de Drupal et le configurer en suivant les indications.
- Pour installer le module avec Composer :
composer require drupal/cas
Sur le site nous avons besoin :
- D'aller sur “Extension”
- D'installer le module CAS
- D'aller à la page de configuration du CAS qui se présente sous la forme suivante :
CAS Protocol version :
- 3.0 or higher
HTTP Protocol :
- HTTP (non-secure), puis configurer HTTPS pour le passage en production
Hostname :
- Mettre l'adresse de notre serveur CAS (seulement la partie "host" de l'adresse)
- Pour l'exemple, nous utilisons “localhost”
Port :
- Le port que vous avez choisi
- Pour l'exemple, nous prenons "8334"
Path :
- A cet emplacement, nous allons mettre le chemin du login de CAS : /cas/login ou tout simplement /cas.
- Pour l’exemple, nous avons mis “/cas”
Login link text :
- Cliquez sur “Place a link to log in via CAS on the standard /user/login form”. Ce paramètre à pour but de remplacer la connexion de base Drupal par la connexion CAS.
- Pour notre exemple, c’est “CAS Login”
Automatically register users :
- Nous devons activer cette option et configurer les suivantes :
Email address assignment
- Cliquez sur " Use the CAS username combined with a custom domain name you specify.". Ce paramètre a pour but d'utiliser le nom d'utilisateur CAS associé à un nom de domaine personnalisé que vous spécifiez.
Email hostname :
- Le domaine de mail que vous souhaitez utiliser.
- Pour l’exemple nous avons choisi “demo.cas.server.com”
Drupal logout triggers CAS logout :
- Il est indispensable d'activer cette option pour pouvoir se déconnecter de Drupal et du Serveur CAS en même temps.
Log out destination
- <front> (Nous redirige vers la page d'accueil)
Enable single logout ?
Démonstration :
Lorsqu'on se rend sur le site Drupal pour se connecter (ex : demo_cas_server/user ), cliquez sur “Connectez-vous avec CAS”, vous pouvez constater qu'il y a une erreur d'accès “Application non autorisée à utiliser CAS”.
Pour résoudre ce problème nous devons donner au CAS le droit d'accès aux applications.
Il existe plusieurs méthodes, cependant nous utiliserons la méthode “InMemory Service Registry”. Pour utiliser celle-ci, il est primordial de faire une configuration en Java et une autre en Spring.
Configuration Java
Ouvrez le fichier build.gradle, ce fichier est celui dans lequel se trouve les dépendances du projet. Les nouvelles dépendances seront ajoutées sous le commentaire “// Other CAS dependencies/modules may be listed here...”
compile "org.apereo.cas:cas-server-core-services-api:${casServerVersion}"
compile "org.apereo.cas:cas-server-core-util-api:${casServerVersion}"
Ensuite nous créons un dossier “config” dans src/:
mkdir -p src/main/java/com/server/cas/demo/config
Dans ce dossier, nous créons une classe Java de configuration :
touch TestRegisteredServicesConfiguration.java
Dans cette classe nous allons intégrer le code nous permettant l’accès par http et https.
Pour l'exemple nous donnerons l'accès à toutes les applications sur le protocole HTTP et HTTPS.
TestRegisteredServicesConfiguration.java :
package com.server.cas.demo.config;
import org.apereo.cas.services.RegexRegisteredService;
import org.apereo.cas.services.AbstractRegisteredService;
import org.apereo.cas.services.RegexMatchingRegisteredServiceProxyPolicy;
import org.apereo.cas.util.RandomUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import java.util.ArrayList;
import java.util.List;
/**
* This is {@link TestRegisteredServicesConfiguration}.
*/
@Configuration("testRegisteredServicesConfiguration")
public class TestRegisteredServicesConfiguration {
@Bean
public List inMemoryRegisteredServices() {
final List<Object> services = new ArrayList<>();
final RegexRegisteredService service = new RegexRegisteredService();
service.setServiceId("^(http|https)://.*");
service.setName("Registered service HTTP and HTTPS");
service.setDescription("This service definition authorizes all application urls that support HTTP and HTTPS protocols.");
service.setId(RandomUtils.getNativeInstance().nextInt());
services.add(service);
return services;
}
}
Configuration Spring
Premièrement nous créons un nouveau dossier “META-INF” dans ressources :
mkdir -p resources/META-INF
Dans ce dossier nous allons créer le fichier “spring.factories” :
touch resources/META-INF/spring.factories
Dans ce fichier nous mettons tous les fichiers de configuration pour que CAS les reconnaisse.
spring.factories :
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.server.cas.demo.config.TestRegisteredServicesConfiguration
Finalement nous allons compiler à nouveau notre CAS et mettre le nouveau fichier cas.war dans Tomcat en vue de le lancer.
Une fois la page actualisée, nous arrivons sur la page du CAS.
Pour se connecter :
Utilisateur : casuser
Mot de passe : Mellon
Et voilà nous avons réussi à nous connecter à Drupal en utilisant le CAS Server.
Commentaire
Est ce possible de publier la procédure pour l'installation et la configuration de CAS dans un environnement Apache ?
merci par avance.
cordialement
Ajouter un commentaire