...
Cette page wiki vient en complément de nos pages Retour de l'URN sur mise en place de CAS 6.0.4 et Retour de l'URN sur mise en place de CAS 6.4.1 ; les retours que l'on avait fait faits sur ces versions 6.x sont a priori toujours d'actualité.
Cette installation est faite sur une debian en utilisant CAS Initializr ; jusque-là notre installation et montée de version s'appuyait sur ce qui était utilisé/embarqué par le Kit installation CAS V5.2 AMU.
On a également profité de cette montée de version pour mettre en place le module OpenID module OpenID Connect Authentication permettant à CAS de supporter authentification OpenIdConnect (oidc) ent en tant que fournisseur (provider/serveur).
...
Pour construire notre CAS, on ajoute dans le .bashrc de ld'un utilisateur 'cas' :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
function getcas() {
url="https://casinit.herokuapp.com/starter.tgz"
projectType="cas-overlay"
dependencies=""
directory="overlay"
for arg in $@; do
case "$arg" in
--url|-u)
url=$2
shift 1
;;
--type|-t)
projectType=$2
shift 1
;;
--directory|--dir|-d)
directory=$2
shift 1
;;
--casVersion|--cas)
casVersion="-d casVersion=$2"
shift 1
;;
--bootVersion|--springBootVersion|--boot)
bootVersion="-d bootVersion=$2"
shift 1
;;
--modules|--dependencies|--extensions|-m)
dependencies="-d dependencies=$2"
shift 1
;;
*)
shift
;;
esac
done
rm -Rf ./${directory}
echo -e "Generating project ${projectType} with dependencies ${dependencies}..."
cmd="curl ${url} -d type=${projectType} -d baseDir=${directory} ${dependencies} ${casVersion} ${bootVersion} | tar -xzvf -"
echo -e "${cmd}"
eval "${cmd}"
ls
} |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
#!/bin/bash -x getcas --cas 6.6.9 --modules support-ldap,support-json-service-registry,support-redis-ticket-registry,support-spnego-webflow,support-trusted-mfa-mongo,support-throttle,support-reports,supp ort-interrupt-webflow,support-oidc |
On le lance ce script qui nous construit l'overlay CAS dans le répertoire overlay. Ce répertoire étant sous git dès à présent est versionné via git avec pour premier commit "Project created by Apereo CAS Initializr".
...
On a choisi ici l'utilisation du tomcat9 founi fourni par debian, on modifie /var/lib/tomcat9/conf/server.xml pour ne pas loguer les accès (qui seront logués par le apache en frontal), désactiver le connecteur http et activer le connecteur ajp.
...
Installation des autres composants
On installe etconfigure et configure également les autres paquets/briques nécessaires au bon fonctionnnement fonctionnement de notre CAS, à savoir :
- apache avec ajp, ssl, ...
- certbot pour automatiser le renouvellement des certificats
- les briques requise's requises par les modules CAS utilisés : mogodb, redis, etc.
- les briques esup-otp et dépendances associées que l'on installe sur le même serveur
Ajustement des configurations CAS 6.4.6.3 → 6.6.9
A À chaque mise à jour de CAS, son lot de renommage de configurations ... liste non exhaustive pour CAS dans /etc/cas/config/cas.properties :
...
/var/www/printenv.pl étant le "traditionnel" script utilisé notamment dans les configurations shibboleth et donnant simplement les entêtes HTTP HTTP.
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "Variables d'environnement :\n\n";
foreach my $key (keys %ENV) {
printf "$key=$ENV{$key}\n";
} |
On y voit alors le REMOTE_USER de positionnéOn y voit alors le REMOTE_USER de positionné, mais aussi des OIDC_CLAIM_* dont OIDC_CLAIM_attributes regroupant l'ensemble des attributs renvoyés (sous forme de json).
...
Lors de la migration sur ce nouveau CAS, il a fallut fallu ajuster notre script groovy déclenchant la MFA (script donné derrière la configuration cas.authn.mfa.groovy-script.location ).
...
On récupérait jusque là cette IP par httpRequest.getRemoteAddr() - cependant, et depuis notre mise à jour CAS, ce script est maintenant aussi appelé lors de la validation du ticket par le service CAS. L'IP est alors l'ip du service et non pas du client/usager.
En ne demandant pas la MFA pour un client donné (au preimer premier appel) mais en la demandant lors de la validation du ticket, nous récupérions une erreur de type invalid_authentication_context côté du service lors de la validation du ticket.
...
| Bloc de code |
|---|
def ip = authentication.attributes["clientIpAddress"].get(0) |
et non pas (plus, en tout cas pour nous)
| Bloc de code |
|---|
def ip = httpRequest.getRemoteAddr() |
Cette revalidation, du fait que le client doit ou non passer par la (une) MFA (réexcéution ré-exécution du script groovy) lors de la validation du ticket, est apparue entre la 6.4.6.6 et la 6.6.9
...