{"id":1405,"date":"2013-11-11T18:15:50","date_gmt":"2013-11-11T17:15:50","guid":{"rendered":"http:\/\/blog.guiguiabloc.fr\/?p=1405"},"modified":"2013-11-11T18:15:50","modified_gmt":"2013-11-11T17:15:50","slug":"mise-en-oeuvre-dun-serveur-dauthentification-sso-avec-cas-et-memcached","status":"publish","type":"post","link":"http:\/\/blog.guiguiabloc.fr\/index.php\/2013\/11\/11\/mise-en-oeuvre-dun-serveur-dauthentification-sso-avec-cas-et-memcached\/","title":{"rendered":"Mise en oeuvre d&rsquo;un serveur d&rsquo;authentification SSO avec CAS et Memcached"},"content":{"rendered":"<p style=\"text-align: center;\"><a href=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2013\/11\/sso.png\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-1621\" alt=\"sso\" src=\"http:\/\/blog.guiguiabloc.fr\/wp-content\/2013\/11\/sso.png\" width=\"299\" height=\"220\" \/><\/a><\/p>\n<p>Apr\u00e8s <a title=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2013\/02\/04\/haute-disponibilite-et-load-balancing-par-cascade-de-ns\/\" href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2013\/02\/04\/haute-disponibilite-et-load-balancing-par-cascade-de-ns\/\" target=\"_blank\">ce billet o\u00f9 j&rsquo;ai d\u00e9taill\u00e9 la mise en place d&rsquo;un load-balancing\/failover a base de cascade de NS<\/a>, nous allons passer aujourd&rsquo;hui \u00e0 la deuxi\u00e8me partie. Et surtout, au but dont je voulais vous parler dans ce petit challenge technique que mon ami <a title=\"http:\/\/www.lostinbrittany.org\/blog\/\" href=\"http:\/\/www.lostinbrittany.org\/blog\/\" target=\"_blank\">Horacio<\/a> m&rsquo;a doucement pouss\u00e9 \u00e0 r\u00e9aliser (bien malgr\u00e9 lui \ud83d\ude42 c&rsquo;\u00e9tait plut\u00f4t un d\u00e9fi personnel que j&rsquo;avais envie aussi de concevoir).<\/p>\n<p>Au fil de plusieurs discussions techniques enjou\u00e9es (avec <a title=\"http:\/\/www.lostinbrittany.org\/blog\/\" href=\"http:\/\/www.lostinbrittany.org\/blog\/\" target=\"_blank\">Horacio<\/a>, le terme enjou\u00e9e prend rapidement des allures de trolldi \ud83d\ude00 (private joke)), un syst\u00e8me CAS a peupl\u00e9 nos \u00e9changes et je vous en livre ici une explication dans le texte.<\/p>\n<p><a title=\"http:\/\/fr.wikipedia.org\/wiki\/Central_Authentication_Service\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Central_Authentication_Service\" target=\"_blank\">CAS (Central Authentication Service)<\/a> est un syst\u00e8me d&rsquo;authentification unique bas\u00e9 sur une gestion de ticket provisoire.<\/p>\n<p>Il permet \u00e0 un utilisateur de ne s&rsquo;authentifier qu&rsquo;une fois sur un portail web pour avoir acc\u00e8s \u00e0 diverses ressources (sites web diff\u00e9rents la plupart du temps) qui se base \u00e9galement sur ce syst\u00e8me d&rsquo;authentification.<br \/>\nC&rsquo;est le fameux <a title=\"http:\/\/fr.wikipedia.org\/wiki\/Authentification_unique\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Authentification_unique\" target=\"_blank\">SSO (Single Sign-On)<\/a> dont vous avez peut-\u00eatre entendu parl\u00e9.<\/p>\n<p>Le challenge que je me suis donn\u00e9 est bien entendu de rendre cette solution hautement disponible. Si votre serveur CAS est inaccessible, c&rsquo;est un lot non n\u00e9gligeable d&rsquo;utilisateurs qui ne pourront plus s&rsquo;authentifier, avec les d\u00e9sagr\u00e9ments qui vont avec (des gens en cravate partout dans votre bureau ou par dessus votre \u00e9paule pour savoir quand cela remarchera).<\/p>\n<p>Quelques ann\u00e9es en arri\u00e8re, je vous avais parl\u00e9 de <a title=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/09\/08\/replication-de-serveurs-memcached\/\" href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/09\/08\/replication-de-serveurs-memcached\/\" target=\"_blank\">Memcached et de la fa\u00e7on de le faire fonctionner en mode s\u00e9curis\u00e9<\/a>. Et \u00e7a tombe bien, CAS supporte memcached \ud83d\ude42<\/p>\n<p>Nous allons consid\u00e9rer que vous avez vos deux serveurs en place, loadbalanc\u00e9s par une technique quelconque (avec <a title=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/07\/04\/haute-disponibilite-de-fermes-apache-et-tomcat\/\" href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/07\/04\/haute-disponibilite-de-fermes-apache-et-tomcat\/\" target=\"_blank\">PF sous OpenBSD<\/a>, avec <a title=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2013\/02\/04\/haute-disponibilite-et-load-balancing-par-cascade-de-ns\/\" href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2013\/02\/04\/haute-disponibilite-et-load-balancing-par-cascade-de-ns\/\" target=\"_blank\">une cascade de NS<\/a>, avec <a title=\"http:\/\/arnofear.free.fr\/linux\/template.php?tuto=25&amp;page=1\" href=\"http:\/\/arnofear.free.fr\/linux\/template.php?tuto=25&amp;page=1\" target=\"_blank\">LVS sous Linux,<\/a> une appliance propri\u00e9taire ou <a title=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/10\/17\/cluster-haute-disponibilite-chez-ovh-avec-ipfailover-heartbeat-et-drbd-via-ipsec\/\" href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2008\/10\/17\/cluster-haute-disponibilite-chez-ovh-avec-ipfailover-heartbeat-et-drbd-via-ipsec\/\" target=\"_blank\">une IP FailOver<\/a>, bref ce que vous voulez).<\/p>\n<p>Premi\u00e8re \u00e9tape, d\u00e9ployer sur le deux serveurs, un memcached r\u00e9pliqu\u00e9. Rien de bien compliqu\u00e9 si vous avez lu <a title=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/09\/08\/replication-de-serveurs-memcached\/\" href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2009\/09\/08\/replication-de-serveurs-memcached\/\" target=\"_blank\">ce billet<\/a> (je vous laisse bien \u00e9videmment valid\u00e9 que vos cl\u00e9s\/valeurs se r\u00e9pliquent correctement).<\/p>\n<p>D\u00e9ployer un serveur <a title=\"http:\/\/tomcat.apache.org\/\" href=\"http:\/\/tomcat.apache.org\/\" target=\"_blank\">Tomcat<\/a> sur chacune de vos machines (Tomcat 6 ou 7 \u00e0 votre convenance, prenez le Core) avec un java 1.6 minimum.<br \/>\nWget, puis tar xzvf\u00a0apache-tomcat-x.x.x.tar.gz etc&#8230; Rien de transcendant.<\/p>\n<p><strong>&#8211; G\u00e9n\u00e9ration du certificat SSL<\/strong><\/p>\n<p>CAS exige une connexion https, donc nous allons g\u00e9n\u00e9rer un certificat pour nos tomcats.<\/p>\n<pre lang=\"text\">serveur:\/opt\/tomcat7# keytool -genkey -alias tomcat -keyalg RSA -validity 365\r\nTapez le mot de passe du Keystore :\r\nQuels sont vos pr\u00e9nom et nom ?\r\n[Unknown] :\u00a0 cas.guiguiabloc.fr\r\nQuel est le nom de votre unit\u00e9 organisationnelle ?\r\n[Unknown] :\u00a0 guiguiabloc\r\nQuelle est le nom de votre organisation ?\r\n[Unknown] :\u00a0 guiguiabloc\r\nQuel est le nom de votre ville de r\u00e9sidence ?\r\n[Unknown] :\u00a0 Brest\r\nQuel est le nom de votre \u00e9tat ou province ?\r\n[Unknown] :\u00a0 Bretagne\r\nQuel est le code de pays \u00e0 deux lettres pour cette unit\u00e9 ?\r\n[Unknown] :\u00a0 FR\r\nEst-ce CN=cas.guiguiabloc.fr, OU=guiguiabloc, O=guiguiabloc, L=Brest, ST=Bretagne, C=FR ?\r\n[non] :\u00a0 oui\r\n\r\nSp\u00e9cifiez le mot de passe de la cl\u00e9 pour tomcat\r\n(appuyez sur Entr\u00e9e s'il s'agit du mot de passe du Keystore) :<\/pre>\n<p><strong>ATTENTION :<\/strong> sp\u00e9ficiez bien le nom \u00ab\u00a0loadbalanc\u00e9\u00a0\u00bb DNS de votre CAS (le nom utilis\u00e9 pour joindre les deux instances dans le champ \u00ab\u00a0Quels sont vos pr\u00e9nom et nom ?\u00a0\u00bb<\/p>\n<p>D\u00e9commentez la partie SSL dans le fichier server.xml de votre Tomcat (\/TOMCAT_HOME\/conf\/server\/xml)<\/p>\n<pre lang=\"text\">\r\n<!--\r\n   <Connector port=\"8443\" protocol=\"HTTP\/1.1\" SSLEnabled=\"true\"  \r\n   maxThreads=\"150\" scheme=\"https\" secure=\"true\"                clientAuth=\"false\" sslProtocol=\"TLS\" \/>\r\n-->\r\n(Enlevez les <!-- et -->)<\/pre>\n<p>Exporter le certificat pour l&rsquo;installer sur votre autre Tomcat<\/p>\n<pre lang=\"text\">keytool -export -alias tomcat -file servercas.crt<\/pre>\n<p>Sur le deuxi\u00e8me serveur :<\/p>\n<pre lang=\"text\">keytool -import -file servercas.crt -keystore $JAVA_HOME\/jre\/lib\/security\/cacerts -alias tomcat<\/pre>\n<p>D\u00e9marrer les tomcats (bin\/startup.sh) et v\u00e9rifier qu&rsquo;ils sont bien accessibles sur le port 8443 en https.<\/p>\n<p><strong>&#8211; Installer Maven 2<\/strong><br \/>\nRendez vous sur le site du projet Maven et t\u00e9l\u00e9chargez la version 2.2.1 (la version 3 n&rsquo;est pas encore recommand\u00e9 pour CAS)<\/p>\n<pre lang=\"bash\">wget http:\/\/mirrors.ircam.fr\/pub\/apache\/maven\/maven-2\/2.2.1\/binaries\/apache-maven-2.2.1-bin.tar.gz\r\ntar xzvf apache-maven-2.2.1-bin.tar.gz\r\nln -s apache-maven-2.2.1 maven2<\/pre>\n<p>Ajouter l&#8217;emplacement des binaires Maven2 \u00e0 votre PATH (et votre JAVA_HOME si cela n&rsquo;a pas d\u00e9j\u00e0 \u00e9t\u00e9 fait)<\/p>\n<pre lang=\"bash\"># export PATH=\/opt\/maven2\/bin:$PATH\r\n#export JAVA_HOME=\/usr\/lib\/jvm\/java-6-sun-1.6.0.26\/jre<\/pre>\n<p>(OUI ! je sais, j&rsquo;ai une vieille version de JAVA toute pourrie sur mes serveurs de tests \ud83d\ude00 donc je vous laisse mettre \u00e0 jour la votre)<\/p>\n<p>V\u00e9rifier que Maven est op\u00e9rationnel :<\/p>\n<pre lang=\"bash\"># mvn --version\r\nApache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)\r\nJava version: 1.6.0_26\r\nJava home: \/usr\/lib\/jvm\/java-6-sun-1.6.0.26\/jre\r\nDefault locale: fr_FR, platform encoding: ISO-8859-15\r\nOS name: \"linux\" version: \"2.6.26-2-686\" arch: \"i386\" Family: \"unix\"<\/pre>\n<p>(OUI ! Je sais, j&rsquo;ai un kernel tout moisi. Ca suffit \u00e0 la fin !)<\/p>\n<p><strong>&#8211; Installer CAS<\/strong><\/p>\n<p>Nous allons utiliser la version communautaire de CAS, con\u00e7u par l&rsquo;universit\u00e9 de Yale et maintenu d\u00e9sormais par le projet Jasig qui r\u00e9unit diverses \u00e9coles.<br \/>\nT\u00e9l\u00e9chargez la derni\u00e8re version a ce jour (3.5.2) :<br \/>\n<a title=\"http:\/\/www.jasig.org\/cas\/download\" href=\"http:\/\/www.jasig.org\/cas\/download\" target=\"_blank\">http:\/\/www.jasig.org\/cas\/download<\/a><br \/>\nUne fois le fichier d\u00e9tarr\u00e9\/d\u00e9gzipp\u00e9, cr\u00e9er votre propre environnement de travail :<\/p>\n<pre lang=\"bash\">cd \/opt\/cas-server-3.5.2\r\nmkdir cas-guiguiabloc\r\ncd cas-guiguiabloc<\/pre>\n<p>Dans le r\u00e9pertoire de votre projet, nous allons cr\u00e9er le fichier \u00ab\u00a0de configuration\u00a0\u00bb de CAS. Il contient les appels vers les diff\u00e9rentes d\u00e9pendances disponibles.<br \/>\nCe fichier s&rsquo;appelle pom.xml<\/p>\n<pre lang=\"xml\">\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\"\r\n         xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n         xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd \">\r\n    <modelVersion>4.0.0<\/modelVersion>\r\n    <groupId>fr.guiguiabloc.cas<\/groupId>\r\n    <artifactId>cas-guiguiabloc<\/artifactId>\r\n    <packaging>war<\/packaging>\r\n    <version>1.1-SNAPSHOT<\/version>\r\n\r\n    <build>\r\n        <plugins>\r\n            <plugin>\r\n                 <artifactId>maven-war-plugin<\/artifactId>\r\n                             <configuration>\r\n                                 <warName>cas<\/warName>\r\n                             <\/configuration>\r\n                        <\/plugin>\r\n        <\/plugins>\r\n    <\/build>\r\n\r\n    <dependencies>\r\n        <dependency>\r\n            <groupId>org.jasig.cas<\/groupId>\r\n            <artifactId>cas-server-webapp<\/artifactId>\r\n            <version>${cas.version}<\/version>\r\n            <type>war<\/type>\r\n            <scope>runtime<\/scope>\r\n        <\/dependency>\r\n        <dependency>\r\n            <groupId>org.jasig.cas<\/groupId>\r\n            <artifactId>cas-server-support-generic<\/artifactId>\r\n            <version>${cas.version}<\/version>\r\n            <type>jar<\/type>\r\n            <scope>runtime<\/scope>\r\n        <\/dependency>\r\n        <dependency>\r\n            <groupId>org.jasig.cas<\/groupId>\r\n            <artifactId>cas-server-integration-memcached<\/artifactId>\r\n            <version>${cas.version}<\/version>\r\n            <type>jar<\/type>\r\n        <\/dependency>\r\n    <\/dependencies>\r\n\r\n    <properties>\r\n        <cas.version>3.5.2<\/cas.version>\r\n    <\/properties>\r\n\r\n        <repositories>\r\n             <repository>\r\n                  <id>ja-sig<\/id>\r\n                  <url>http:\/\/oss.sonatype.org\/content\/repositories\/releases\/ <\/url>\r\n             <\/repository>\r\n        <\/repositories>\r\n<\/project>\r\n\r\n<\/pre>\n<p>Je ne d\u00e9taillerais pas tout, la documentation de CAS est assez explicite, mais dans notre exemple, nous allons utiliser une webapp g\u00e9n\u00e9rique, avec le support memcached et que Maven2 puisse utiliser les d\u00e9pots publics de Jasig.<\/p>\n<p>C&rsquo;est parti pour une premi\u00e8re compilation !<\/p>\n<pre lang=\"bash\">cd \/opt\/cas-server-3.5.2\/cas-guiguiabloc\r\nmvn clean package<\/pre>\n<p>Laisser le temps a Maven de t\u00e9l\u00e9charger Internet et le r\u00e9sultat devrait apparaitre<\/p>\n<pre lang=\"text\">[INFO] [war:war {execution: default-war}]\r\n[INFO] Packaging webapp\r\n[INFO] Assembling webapp[cas-guiguiabloc] in [\/opt\/cas-server-3.5.2\/cas-guiguiabloc\/target\/cas-guiguiabloc-1.0-SNAPSHOT]\r\n[INFO] Processing war project\r\n[INFO] Processing overlay[ id org.jasig.cas:cas-server-webapp]\r\n[INFO] Webapp assembled in[4636 msecs]\r\n[INFO] Building war: \/opt\/cas-server-3.5.2\/cas-guiguiabloc\/target\/cas.war\r\n[INFO] ------------------------------------------------------------------------\r\n[INFO] BUILD SUCCESSFUL\r\n[INFO] ------------------------------------------------------------------------\r\n[INFO] Total time: 2 minutes 36 seconds\r\n[INFO] Finished at: Mon Nov 11 00:42:10 CET 2013\r\n[INFO] Final Memory: 18M\/44M\r\n[INFO] ------------------------------------------------------------------------<\/pre>\n<p>En l&rsquo;\u00e9tat, vous avez donc maintenant un joli cas.war dans le r\u00e9pertoire target de votre projet que vous pouvez d\u00e9poser dans votre tomcat\/webapps\/.<br \/>\nCela vous permet d\u00e9j\u00e0 de v\u00e9rifier que tout fonctionne comme il se doit sur https:\/\/serveur:8443\/cas<\/p>\n<p>Maintenant, peaufinons tout cela :<\/p>\n<pre lang=\"bash\">serveur:\/opt\/cas-server-3.5.2\/cas-guiguiabloc# mkdir -p src\/main\/webapp\/WEB-INF<\/pre>\n<p>Dans ce r\u00e9pertoire WEB-INF, nous allons y copier le fichier :<br \/>\n\/opt\/cas-server-3.5.2\/cas-guiguiabloc\/target\/cas-guiguiabloc-1.0-SNAPSHOT\/WEB-INF\/deployerConfigContext.xml<br \/>\net le modifier pour inclure :<br \/>\n&#8211; l&rsquo;authentification locale par un user\/mot de passe<br \/>\n&#8211; le support de memcached<\/p>\n<p>Pour l&rsquo;authentification locale, ajouter la section suivante :<\/p>\n<pre lang=\"xml\">\r\n<bean class=\"org.jasig.cas.adaptors.generic.AcceptUsersAuthenticationHandler\">\r\n <property name=\"users\">\r\n   <map>\r\n   <entry>\r\n   <key>\r\n                                                                <value>guiguiabloc<\/value>\r\n   <\/key>\r\n                                                                <value>1234<\/value>\r\n   <\/entry>\r\n   <\/map>\r\n   <\/property>\r\n   <\/bean>\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Ici nous cr\u00e9ons un simple utilisateur \u00ab\u00a0guiguiabloc\u00a0\u00bb avec le mot de passe 1234.<br \/>\nEn prod, vous pourrez utiliser un autre syst\u00e8me d&rsquo;authentification bien sur (LDAP etc&#8230;)<\/p>\n<p>Pour le support memcached, voici la section a ajouter :<\/p>\n<pre lang=\"xml\">\r\nbean id=\"ticketRegistry\" class=\"org.jasig.cas.ticket.registry.MemCacheTicketRegistry\">\r\n  <constructor-arg index=\"0\" ref=\"memcachedClient\" \/>\r\n  <constructor-arg index=\"1\" value=\"21600\" \/>\r\n  <constructor-arg index=\"2\" value=\"300\" \/>\r\n<\/bean>\r\n<bean id=\"memcachedClient\" class=\"net.spy.memcached.spring.MemcachedClientFactoryBean\"\r\n      p:servers=\"127.0.0.1:11211\"\r\n      p:protocol=\"TEXT\"\r\n      p:locatorType=\"ARRAY_MOD\"\r\n      p:failureMode=\"Cancel\"\r\n      p:transcoder-ref=\"kryoTranscoder\">\r\n<\/bean>\r\n<bean id=\"kryoTranscoder\"\r\n      class=\"org.jasig.cas.ticket.registry.support.kryo.KryoTranscoder\"\r\n      init-method=\"initialize\">\r\n  <constructor-arg index=\"0\" value=\"8192\" \/>\r\n<\/bean>\r\n\r\n\r\n<\/pre>\n<p>Bien sur je ne peux que vous invitez a lire la documentation officielle \ud83d\ude42<br \/>\n<a title=\"https:\/\/wiki.jasig.org\/display\/CASUM\/MemcacheTicketRegistry\" href=\"https:\/\/wiki.jasig.org\/display\/CASUM\/MemcacheTicketRegistry\" target=\"_blank\">https:\/\/wiki.jasig.org\/display\/CASUM\/MemcacheTicketRegistry<\/a><\/p>\n<p>A toute fin utile, vous trouverez <a title=\"http:\/\/blog.guiguiabloc.fr\/deployerConfigContext.xml\" href=\"http:\/\/blog.guiguiabloc.fr\/deployerConfigContext.xml\" target=\"_blank\">ICI<\/a> le fichier deployerConfigContext.xml que j&rsquo;ai utilis\u00e9.<\/p>\n<p>On recompile le WAR dans cas-guiguiabloc (mvn clean package) et on le copie dans nos webapps Tomcat (apr\u00e8s avoir supprim\u00e9 l&rsquo;ancien r\u00e9pertoire cas)<\/p>\n<p>D\u00e9marrez vos Tomcat et authentifiez vous sur la mire CAS, Tadam !<br \/>\nSi tout se passe bien, la connexion r\u00e9ussi et vous devez avoir un cookie CAS :<\/p>\n<pre lang=\"text\">Name\tCASTGC\r\nValue\tTGT-3-mcWQGjaB1bSHNScWUJbq2EyLsLm9vysjl6lIkaXfuN4TMFVTow-cas01.example.org\r\nDomaine (host)\tcas.guiguiabloc.fr\r\nChemin d'acc\u00e8s (path)\t\/cas\/\r\nS\u00e9curis\u00e9\toui\r\nExpire le\t\u00c0 la fin de la session<\/pre>\n<p>Et magie, sur vos deux memcached, vous allez retrouver votre ticket en recherchant la valeur du cookie en tant que cl\u00e9 :<\/p>\n<pre lang=\"text\">Trying 127.0.0.1...\r\nConnected to localhost.\r\nEscape character is '^]'.\r\nget TGT-3-mcWQGjaB1bSHNScWUJbq2EyLsLm9vysjl6lIkaXfuN4TMFVTow-cas01.example.org\r\nVALUE TGT-3-mcWQGjaB1bSHNScWUJbq2EyLsLm9vysjl6lIkaXfuN4TMFVTow-cas01.example.org 0 386\r\nBH\u00a0.\r\nguiguiablocuiduidgroupMembershipgroupMembershipeduPersonAffiliationeduPersonAffiliationauthenticationMethod?org.jasig.cas.adaptors.generic.AcceptUsersAuthenticationHandler\u00de\u00c9P!\u00d0\u00bb\u00f4\u00eeJTGT-3-mcWQGjaB1bSHNScWUJbq2EyLsLm9vysjl6lIkaXfuN4TMFVTow-cas01.example.org\u00e4\u00c9P\u00de\u00c9P+ST-6-iHWaAvdowI0WGE1du76P-cas01.example.org\r\nEND<\/pre>\n<p>Vos deux serveurs CAS se partagent la m\u00eame source d&rsquo;information de tickets valides \ud83d\ude00<\/p>\n<p>J&rsquo;esp\u00e8re que cette petite approche de CAS vous aura \u00e9moustill\u00e9. Bien entendu, il existe plein d&rsquo;options de compilation et de configuration qui vous permettrons d&rsquo;avoir un\/des serveur(s) CAS aux petits oignons.<\/p>\n<p>Si vous souhaitez maintenant int\u00e9grer votre serveur web \u00e0 CAS (avec Apache par exemple), vous trouverez un tr\u00e8s bon tuto ici :<br \/>\n<a title=\"https:\/\/ucdavis.jira.com\/wiki\/display\/IETP\/mod_auth_cas\" href=\"https:\/\/ucdavis.jira.com\/wiki\/display\/IETP\/mod_auth_cas\" target=\"_blank\">https:\/\/ucdavis.jira.com\/wiki\/display\/IETP\/mod_auth_cas<\/a><br \/>\nPour info, la m\u00e9thode la plus facile pour compiler le mod_auth_cas avec apxs2 est :<\/p>\n<pre lang=\"bash\">apxs2 -i -lssl -lcurl -c mod_auth_cas.c cas_saml_attr.c<\/pre>\n<p>Amusez-vous bien \ud83d\ude00<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apr\u00e8s ce billet o\u00f9 j&rsquo;ai d\u00e9taill\u00e9 la mise en place d&rsquo;un load-balancing\/failover a base de cascade de NS, nous allons passer aujourd&rsquo;hui \u00e0 la deuxi\u00e8me partie. Et surtout, au but dont je voulais vous parler dans ce petit challenge technique &hellip; <a href=\"http:\/\/blog.guiguiabloc.fr\/index.php\/2013\/11\/11\/mise-en-oeuvre-dun-serveur-dauthentification-sso-avec-cas-et-memcached\/\">Read More <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27,7,8],"tags":[209,208,29],"_links":{"self":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/1405"}],"collection":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/comments?post=1405"}],"version-history":[{"count":32,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/1405\/revisions"}],"predecessor-version":[{"id":1633,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/posts\/1405\/revisions\/1633"}],"wp:attachment":[{"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/media?parent=1405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/categories?post=1405"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.guiguiabloc.fr\/index.php\/wp-json\/wp\/v2\/tags?post=1405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}