Sommaire |
---|
Contexte
Eté 2019, l'Université de Rouen Normandie a procédé à une montée de version de son service d'authentification CAS en 6.0.4, nous partageons sur cet espace notre expérience.
...
Sans doute la partie qui devrait intéresser le plus les membres du Groupe de Travail Authentification EsupPortail notamment.
Cf ci-dessus (paragraphe sur le ), on souhaite proposer à nos utilisateurs la possibilité de conserveur leur session CAS sous mobile durant 2 semaines (14 jours, soit 1209600 secondes). Sans rememberme de demandé, on propose une conservation de session CAS comme donné par défaut : cad 8 heures (28800 secondes).
...
Enfin la taille de la base de données, et la taille prise donc par la persistence d'un ticket dans postgresql est justifiée par cet usage des Large Object . ; du coup celà prend une place relativement conséquente ; l'ordre de grandeur est environ 3GB pour 30000 TGT ...
Celà nous amène à conclure que l'usage d'un ticket registry CAS en JPA/Postgresql est clairement à éviter.
...
De même le stockage en ram comme en fichier (fichier de dump) requiert donc finalement peu d'espace. Là où nous avions besoin d'environ 3GB pour 30.000 TGT, c'est 300MB de RAM qu'il nous faut. Proposer 14 jours de persistence de TGT sur les mobiles pour les utilisateurs qui choissent l'option 'se souvenir de moi' est finalement à portée avec le ticket registry sous Redis.
Conclusion
- Le ticket registry via Redis donne toute satisfaction.
- Le ticket registry via jpa/postgresql a peut-être été un choix possible dans les anciennes versions de CAS ; aujourd'hui celà est très risqué de l'utilisé ... il est vraiment à déconseiller.
Misc
Via des versions à jour de spring-boot et spring-security, CAS en 6.0.x amène l'usage des dernières technologies web, notamment en matière de sécurité (csp, xss, csrf, xsrf ...) et de protocole (chunked transfer encoding).
...
Bloc de code |
---|
#!/usr/bin/python import os import cgi import urllib2 def pageget(url): req = urllib2.Request(url) rep = urllib2.urlopen(req) data = rep.read() return data if __name__ == '__main__': url = os.environ["REQUEST_URI"] content = pageget('https://cas.univ-ville.fr' + url) print "Status: 200" print "Content-Length: " + str(len(content)+1) print print content |
...