Système de log externe des tentatives de connexions au serveur CAS en temps réel Jérôme Bousquié IUT de Rodez
CAS Central Authentication Service SSO Web conçu par Yale c est un protocole et une architecture Rappel...
CAS : premier accès Browser 1 GET https://webapp/ CAS Webapp (???) 302 Location https://cas/login?service=https://webapp/ GET https://cas/login?service=https://webapp/ 2 (saisie credentials) 3 (???) [Formulaire Login CAS] POST https://cas/login?service=https://webapp/ (authentification) TGC + 302 Location https://webapp/?ticket=st123 4 GET https://webapp/?ticket=st123 [TGC] GET https://cas/servicevalidate? service=https://webapp/&ticket=st123 5 200 [données XML] 200 [webapp authentifiée] + cookie session
CAS : applications suivantes Browser 1 [TGC] GET https://webapp2/ CAS Webapp (???) 302 Location https://cas/login?service=https://webapp2/ GET https://cas/login?service=https://webapp2/ (session CAS = TGC) 2 302 Location https://webapp2/?ticket=st456 3 GET https://webapp2/?ticket=st456 GET https://cas/servicevalidate? service=https://webapp2/&ticket=st456 4 200 [données XML] 200 [webapp authentifiée] + cookie session
CAS est un point d'entrée majeur. C'est donc bien de savoir en permanence : Qui tente de l'utiliser? Depuis où? Pour faire quoi? Qui réussit à se connecter?
Mais CAS / JA-SIG c'est...
Mais CAS / JA-SIG c'est... TOMCAT JAVA ANT SPRING Aaaargggg...
Java Call Stack un délice
Et pourtant... Que fait CAS 90 % du temps? Il compare deux chaînes de caractères : soit celle du TGC et de la session CAS, soit celles du ST du browser et de la webapp Il renvoie un header http 302
On ne veut pas toucher au serveur. Donc, on demande au client de logguer. CASLogger : un tout petit serveur php/mysql un script javascript
<script src = https://caslogger/caslogger.js></script> Une balise html <script> est ajoutée dans le fichier top.jsp pour charger le code dans le navigateur. Pas besoin de redémarrer le serveur CAS.
https://cas.univ/login?service=webapp 2 POST <form> 1 POST https (xhr) CLIC! Serveur CASLogger https://caslogger/ - username
1 POST https (xhr) CLIC! - Mais aussi... Serveur CASLogger https://caslogger/ username message d'erreur ip x-forwarded-for user-agent referer url demandée ouatéveur BdD MySQL : insert into tentatives
Les tentatives de connexion à CAS, c'est bien joli... mais quid des connexions effectives? mustredirect = true;
La ruse : Le script js ré-écrit à la volée l URL vers la web app cassifiée «Caslogger» qui s immisce alors en première position
https://cas.univ/login?service= https://caslogger/redirect.php &s=webapp CLIC! Serveur CASLogger redirect.php retourne code http 302 'Location: webapp' appli cassifiée! username BdD MySQL : update tentatives...
: redirect Browser 1 GET https://webapp/ CAS Webapp (???) 302 Location https://cas/login?service=https://webapp/ GET https://cas/login?service=https://webapp/ 2 (saisie credentials) 3 (???) CasLogger [Formulaire Login CAS] POST https://cas/login?service=https://caslogger/redirect?s=https://webapp/ (authentification) TGC + 302 Location https://caslogger/redirect?s=https://webapp/&ticket=st123 4 [TGC] 6 GET https://caslogger/redirect? s=https://webapp/&ticket=st123 GET https://cas/servicevalidate? service=https://caslogger/etc/&ticket=st123 302 Location https://webapp GET https://webapp/ procédure des «applications cassifiées suivantes» 5 200 [username]
Ok, mais si... l'utilisateur désactive javascript : CASLogger ne loggue plus et le client CAS continue de fonctionner comme avant (note : on peut forcer l'usage de js)
Ok, mais si... le serveur CASLogger est down ou inaccessible : le script js n'est pas chargé et le client CAS continue de fonctionner comme avant
est léger : 2 scripts php, 1 js, facile à déployer : 1 serveur lamp peu intrusif : un tag <script> facile à exploiter : 1 table + SQL marche avec CAS et SAML FF, Chrome, Safari, IE8+, mobiles
est gratos, bio, fait à la main en Aveyron, disponible dans tous les bonnes épiceries et chez Guy Teub : https://github.com/jbousquie/caslogger