Outils personnels
Vous êtes ici : Accueil GNU / Linux Debian Installer la solution de Single Sign On CAS sur Debian 4.0 Etch
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Installer la solution de Single Sign On CAS sur Debian 4.0 Etch

Par Pierre-Yves Landuré - Dernière modification 09/10/2008 11:22

CAS, pour Central Authentication Service, est une solution de Single Sign On développée par l'université de Yale afin de fournir une méthode sécurisée d'identifier un utilisateur.

Installation

Mise en place de Tomcat

Nous installons le Java Development Kit 1.5

/usr/bin/apt-get install sun-java5-jdk sun-java5-fonts

Et nous le déclarons comme machine virtuelle Java par défaut:

/usr/sbin/update-java-alternatives --set java-1.5.0-sun

Installer Tomcat 5:

/usr/bin/apt-get install tomcat5

Désactivez le gestionnaire de sécurité Java de Tomcat, car il nuit au bon fonctionnement de CAS:

/bin/sed -i -e 's/^[#]*\(TOMCAT5_SECURITY=\).*$/\1no/' \
  /etc/default/tomcat5

Installation de Maven

Maven est un outil de gestion de projet Java nécessaire à la compilation de CAS.

Renseignez la version de Maven que vous souhaitez installer:

VERSION=2.0.9

Nous téléchargeons les binaires:

/usr/bin/wget http://apache.miroir-francais.fr/maven/binaries/apache-maven-2.0.9-bin.tar.gz \
--output-document=/tmp/apache-maven-${VERSION}-bin.tar.gz

Nous décompressons l'archive que nous venons de télécharger:

/bin/tar --directory /tmp -xzf /tmp/apache-maven-${VERSION}-bin.tar.gz

Nous déplaçons le dossier ainsi créé à l'emplacement adéquat:

/bin/mv /tmp/apache-maven-${VERSION} /usr/local/apache-maven

Nous plaçons des liens symboliques vers les exécutables de Maven:

/bin/ln -s /usr/local/apache-maven/bin/m2 /usr/local/bin/m2
/bin/ln -s /usr/local/apache-maven/bin/mvn /usr/local/bin/mvn
/bin/ln -s /usr/local/apache-maven/bin/mvnDebug /usr/local/bin/mvnDebug

Mise en place du serveur CAS

En premier lieu, renseignez le numéro de la version que vous souhaitez installer:

VERSION=3.3

Téléchargez les sources de ce logiciel:

/usr/bin/wget http://www.ja-sig.org/downloads/cas/cas-server-${VERSION}-release.tar.gz \
--output-document=/tmp/cas-server-${VERSION}-release.tar.gz

Décompressez les:

/bin/tar --directory /usr/src -xzf /tmp/cas-server-${VERSION}-release.tar.gz

Une fois ceci fait, placez le WAR de démo du serveur CAS dans le dossier des applications de Tomcat:

/bin/cp /usr/src/cas-server-${VERSION}/modules/cas-server-webapp-${VERSION}.war /var/lib/tomcat5/webapps/cas.war

Et redémarrez Tomcat5:

/etc/init.d/tomcat5 restart

Vous pouvez maintenant accéder à votre installation de démo du serveur CAS à l'adresse:

http://localhost:8180/cas/login

Pour tester votre installation, saisissez un identifiant quelconque, avec pour mot de passe la même valeur. Exemple:

  • Identifiant: admin
  • Mot de passe: admin

Identification basée sur un serveur MySQL

Nous allons voir ici comment configurer CAS de façon à rechercher les informations d'identification des utilisateurs dans une base de données MySQL.

Installation du connecteur JDBC MySQL

En premier lieu, renseignez la version du connecteur que vous souhaitez installer:

VERSION=5.1.6

Téléchargez les sources:

/usr/bin/wget http://mirrors.ircam.fr/pub/mysql/Downloads/Connector-J/mysql-connector-java-${VERSION}.tar.gz \
--output-document=/tmp/mysql-connector-java-${VERSION}.tar.gz

Et décompressez les:

/bin/tar --directory /tmp -xzf /tmp/mysql-connector-java-${VERSION}.tar.gz
Et copier le jar du connecteur dans le dossier des bibliothèques partagées de Tomcat:
/bin/cp /tmp/mysql-connector-java-${VERSION}/mysql-connector-java-${VERSION}-bin.jar /var/lib/tomcat5/shared/lib/

Création d'une base de données (optionnel)

En premier lieu, vous devez installer un serveur MySQL. Pour ce faire, vous pouvez suivre mon guide MySQL sur Debian 4.0 Etch.

Une fois ceci fait, créez une base de données CAS (vous pouvez aussi le faire en suivant mon guide MySQL sur Debian 4.0 Etch).

Remarque: Si vous n'avez pas suivi mon guide pour créer la base de données, veuillez renseigner les paramètres de connexion au serveur MySQL:

MYSQL_HOST=localhost
MYSQL_DB=CAS
MYSQL_USERNAME=cas
MYSQL_USERPWD=password

Une fois la base de donnée créée, nous reprenons le court normal des choses. En premier lieu, nous plaçons une valeur par défaut pour le nom d'hôte du serveur de la base de données:

if [ -z "$MYSQL_HOST" ]; then
MYSQL_HOST=localhost
fi

Nous créons la table des utilisateurs:

/bin/echo "CREATE TABLE user
(
    id INTEGER  NOT NULL AUTO_INCREMENT,
    login VARCHAR(255)  NOT NULL,
    password VARCHAR(255)  NOT NULL,
    PRIMARY KEY (id),
    UNIQUE INDEX unique_login (login)
)Type=InnoDB;" \
| /usr/bin/mysql --user=$MYSQL_USERNAME \
--password=$MYSQL_USERPWD --host=$MYSQL_HOST $MYSQL_DB

Une fois ceci fait, nous insérons le premier utilisateur:

/bin/echo "INSERT INTO user (login, password) VALUES ('admin', 'test');" \
| /usr/bin/mysql --user=$MYSQL_USERNAME \
--password=$MYSQL_USERPWD --host=$MYSQL_HOST $MYSQL_DB

Si vous connaissez la syntaxe SQL, vous pouvez voir que nous venons de créer un utilisateur avec les paramètres d'identification suivants:

  • Identifiant: admin
  • Mot de passe: test

Configuration de CAS pour utiliser une base de données MySQL

En premier lieu, placez-vous dans le dossier contenant les sources de la webapp CAS:

cd /usr/src/cas-server-${VERSION}/cas-server-webapp

Une fois ceci fait, nous créons une copie de sauvegarde des fichiers de configuration que nous allons modifier pour configurer l'utilisation d'une base de données MySQL par CAS:

/bin/cp src/main/webapp/WEB-INF/cas.properties src/main/webapp/WEB-INF/cas.properties.back
/bin/cp src/main/webapp/WEB-INF/deployerConfigContext.xml src/main/webapp/WEB-INF/deployerConfigContext.xml.back

Nous pouvons maintenant modifier les fichiers d'origine pour intégrer les modifications nécessaires à l'utilisation d'une base de données MySQL.

En premier lieu, nous modifions le type de base de données utilisée pour la fonction hibernate:

/bin/sed -i -e 's/^database\.hibernate\.dialect.*/#\0/' \
-e 's/^[#]*\(database\.hibernate\.dialect.*MySQLDialect.*\)/\1/' \
src/main/webapp/WEB-INF/cas.properties

Une fois ceci fait, nous allons modifier le fichier deployerConfigContext.xml qui contient une description XML des différents objets à instancier pour vérifier les utilisateurs à l'aide d'une base de données MySQL.

Nous ajoutons l'espace de nommage tx:

/bin/sed -i -e 's|<beans |\0xmlns:tx="http://www.springframework.org/schema/tx" |' \
-e 's|xsi:schemaLocation="|\0http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd |' \
src/main/webapp/WEB-INF/deployerConfigContext.xml

Nous commentons les éléments de configuration que nous allons remplacer par leurs alternatives MySQL:

  • Le gestionnaire d'identification de test:
    /bin/sed -i -e '/<bean$/N;s|<\(bean.*SimpleTestUsernamePasswordAuthenticationHandler.*/\)>|<!--\1-->|' \
    src/main/webapp/WEB-INF/deployerConfigContext.xml
  • Le registre de service de test:
    /bin/sed -i -e :start -e '/<bean/N;/serviceRegistryDao/N;s|<\(bean.*InMemoryServiceRegistryDaoImpl.*/\)>|<!--\1-->|' \
    src/main/webapp/WEB-INF/deployerConfigContext.xml

Nous ajoutons les éléments de configuration spécifiques à MySQL.

En premier lieu, nous ajoutons la "dataSource", c'est à dire l'élément destiné à contenir les paramètres de connexion à MySQL:

/bin/sed -i -e '/<\/beans>/i\
\
<!-- MySQL database connection -->\
<bean id="dataSource"\
class="org.springframework.jdbc.datasource.DriverManagerDataSource"\
  p:driverClassName="com.mysql.jdbc.Driver"\
  p:url="jdbc:mysql://MYSQL_HOST:3306/MYSQL_DB"\
    p:username="MYSQL_USERNAME"\
  p:password="MYSQL_USERPWD" />' \
src/main/webapp/WEB-INF/deployerConfigContext.xml

Nous ajoutons le gestionnaire d'entités qui permettra de sauvegarder les transactions et les services dans la base de données:

/bin/sed -i -e '/<\/beans>/i\
\
<!-- Entity manager -->\
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">\
<property name="dataSource" ref="dataSource"/>\
<property name="jpaVendorAdapter">\
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">\
<property name="generateDdl" value="true"/>\
<property name="showSql" value="true" />\
</bean>\
</property>\
<property name="jpaProperties">\
<props>\
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>\
<prop key="hibernate.hbm2ddl.auto">update</prop>\
</props>\
</property>\
</bean>' \
src/main/webapp/WEB-INF/deployerConfigContext.xml

Nous ajoutons le gestionnaire de transactions:

/bin/sed -i -e '/<\/beans>/i\
\
<!-- Transaction manager -->\
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">\
<property name="entityManagerFactory" ref="entityManagerFactory"/>\
</bean>\
\
<!-- Transaction manager is annotation driven -->\
<tx:annotation-driven transaction-manager="transactionManager"/>' \
src/main/webapp/WEB-INF/deployerConfigContext.xml

Nous ajoutons le registre des services:

/bin/sed -i -e '/<\/beans>/i\
\
<!-- Service registry -->\
<bean id="serviceRegistryDao" class="org.jasig.cas.services.JpaServiceRegistryDaoImpl"\
p:entityManagerFactory-ref="entityManagerFactory" />' \
src/main/webapp/WEB-INF/deployerConfigContext.xml

Nous ajoutons l'utilitaire de cryptage des mots de passe:

/bin/sed -i -e '/<\/beans>/i\
\
<!-- Password encryption -->\
<bean id="passwordEncoder"\
 class="org.jasig.cas.authentication.handler.PlainTextPasswordEncoder" />' \
src/main/webapp/WEB-INF/deployerConfigContext.xml

Enfin, nous ajoutons le procédé d'identification des utilisateur depuis la base de données MySQL:

/bin/sed -i -e '/class=.*SimpleTestUsernamePasswordAuthenticationHandler/a\
\
<!-- MySQL user authentication -->\
<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler" >\
<property name="dataSource" ref="dataSource"/>\
<property name="passwordEncoder" ref="passwordEncoder"/>\
<property name="fieldUser" value="USER_LOGIN"/>\
<property name="fieldPassword" value="USER_PASSWORD"/>\
<property name="tableUsers" value="USER_TABLE"/>\
</bean>' \
src/main/webapp/WEB-INF/deployerConfigContext.xml

Nous configureons maintenant les dépendances de construction du WAR pour intégrer les dépendances nécessaires à cette nouvelle configuration.

/bin/sed -i -e '/<\/dependencies>/i\
<dependency>\
<groupId>${project.groupId}</groupId>\
<artifactId>cas-server-support-jdbc</artifactId>\
<version>${project.version}</version>\
</dependency>\
<dependency>\
  <groupId>mysql</groupId>\
  <artifactId>mysql-connector-java</artifactId>\
  <version>3.1.11</version>\
  <scope>provided</scope>\
</dependency>\
<dependency>\
  <groupId>org.hibernate</groupId>\
  <artifactId>hibernate-entitymanager</artifactId>\
  <version>3.3.1.ga</version>\
</dependency>\
<dependency>\
  <groupId>org.hibernate</groupId>\
  <artifactId>hibernate</artifactId>\
  <version>3.2.5.ga</version>\
</dependency>\
<dependency>\
  <groupId>concurrent</groupId>\
  <artifactId>concurrent</artifactId>\
  <version>1.3.4</version>\
</dependency>' \
pom.xml

Et nous retirons les exclusions qui pourrait nous poser un problème:

/bin/sed -i -e '/<exclusion>/N;/groupId/N;/artifactId/N;s|<\(exclusion>.*spring-dao.*</exclusion\)>|<!--\1-->|' \
pom.xml

Configuration de l'accès à la base de données

Notre fichier de configuration est maintenant prêt à être modifié en accord avec notre base de données. En premier lieu, renseignez les paramètres de connexion à la base de données contenant vos informations d'identification. Pour notre base de données exemple, cela resemble à:

MYSQL_HOST=localhost
MYSQL_DB=CAS
MYSQL_USERNAME=cas
MYSQL_USERPWD=password

Une fois ceci fait, renseignez le nom de la table ainsi que les champs contenant les informations d'identification. Pour notre exemple, cela ressemble à:

USER_LOGIN=login
USER_PASSWORD=password
USER_TABLE=user

Appliquez maintenant ces paramètres à votre fichier de configuration à l'aide de la commande suivante:

/bin/sed -i -e "s/MYSQL_HOST/${MYSQL_HOST}/" \
-e "s/MYSQL_DB/${MYSQL_DB}/" \
-e "s/MYSQL_USERNAME/${MYSQL_USERNAME}/" \
-e "s/MYSQL_USERPWD/${MYSQL_USERPWD}/" \
-e "s/USER_LOGIN/${USER_LOGIN}/" \
-e "s/USER_PASSWORD/${USER_PASSWORD}/" \
-e "s/USER_TABLE/${USER_TABLE}/" \
src/main/webapp/WEB-INF/deployerConfigContext.xml

Il ne reste plus qu'a créer le WAR.

Remarque: Si vous souhaitez vous plonger plus en avant dans la configuration de CAS, une très bonne documentation est disponible à l'adresse suivante:

http://www.ja-sig.org/wiki/display/CASUM/Configuring

Création du WAR adéquat

Nous nous plaçons dans le dossier des sources:

cd /usr/src/cas-server-${VERSION}/cas-server-webapp

Et nous recréons le fichier WAR:

/usr/local/bin/mvn package install

Une fois ceci fait, placez le WAR du serveur CAS dans le dossier des applications de Tomcat:

/bin/cp /usr/src/cas-server-${VERSION}/cas-server-webapp/target/cas.war /var/lib/tomcat5/webapps/cas.war

Et redémarrez le serveur Tomcat 5:

/etc/init.d/tomcat5 restart

Vous pouvez maintenant accéder à votre installation du serveur CAS à l'adresse:

http://localhost:8180/cas/login

Pour tester votre installation, saisissez l'identifiant suivant (que nous avons inséré plus haut dans la base de données):

  • Identifiant: admin
  • Mot de passe: test

CAS PHP

Installez Pear et php-curl:

/usr/bin/apt-get install php-pear php5-curl

Mettez à jour Pear:

/usr/bin/pear channel-update pear.php.net
/usr/bin/pear upgrade PEAR

Installez CAS PHP:

/usr/bin/pear install http://www.ja-sig.org/downloads/cas-clients/php/1.0.1/CAS-1.0.1.tgz

Remerciements

Attachements

CAS

Posté par philippe le 27/05/2009 07:06
Bonjour,
J'ai suivi votre tutoriel à la lettre sauf que j'ai utilisé la version 3.3.2 de CAS server. Tout fonctionne bien jusqu'à la création du war.
Une fois que j'ai copié le war dans le dossier des applications de Tomcat, je n'accède plus au cas. http://foadagri.fr:8180/cas....http 404 la ressource demandée n'est pas disponible.
Quel pourrait être le problème? Merci

utilisez les fichiers journaux

Posté par Lone Wolf le 27/05/2009 07:16
Bonjour,

les causes de cette erreur 404 peuvent être nombreuses. Je vous invite à consulter vos fichiers journaux de Tomcat (probablement présents dans /var/log/tomcat5) et a rechercher d'éventuels messages d'erreurs concernant votre war de CAS.

Bon courrage dans vos recherches.

error log

Posté par philippe le 27/05/2009 09:26
D'abord merci de votre réponse rapide

log4j:ERROR setFile(null,true) call failed.
ERROR [org.springframework.web.context.ContextLoader] - <Context initialization failed>
java.io.FileNotFoundException: cas.log (Permission denied)

J'ai trouvé ces 3 erreurs.

Cordialement

Problème de permission

Posté par Lone Wolf le 27/05/2009 09:36
Bonjour,

il semblerait que ce soit un problème de fichier avec des permissions inadéquates :

java.io.FileNotFoundException: cas.log (Permission denied)

Je vous conseille de trouver le fichier cas.log et de lui faire un chmod 777.

Bonne continuation.

Config

Posté par Neurones le 07/09/2009 11:45
Merci pour l’article
J’ai une question :
Est-ce qu’il y a une possibilité d’externaliser certains paramètres, exemple l’Url de MySQL, login, password, etc… et que la génération du WAR ne soit pas dépendante de ces paramètres ?

Je cherche à mettre ces paramètres dans un fichier de config externalisé et à l’exécution du WAR sur Tomcat le programme récupère ces paramètres dans le fichier.


je ne crois pas

Posté par Pierre-Yves Landuré le 07/09/2009 12:05
Bonjour,

je ne crois pas que ce soit possible simplement, mais je ne suis pas très bon en tomcat. Le war étant décompressé pour que le serveur CAS puisse fonctionné, il y a peut être moyen de modifier les fichiers de configuration après installation du war, mais je ne sais pas trop.

Bonne chance toutefois.

Merci

Posté par Neurones le 07/09/2009 12:29
Merci pour la réactivité et bonne chance à toi aussi

installation cas 3.4.2

Posté par philippe le 20/04/2010 15:05
Bonjour
j'essaie d'installer la dernière version du cas, j'ai bien suivi ce que vous avez fait

Je fais mvn package install
J'ai une erreur lorsque je regarde le répertoire donné dans le fichier cas-server-webapp/target/surefire-reports/org.jasig.cas.util.AutowiringSchedulerFactoryBeanTests.txt

J'ai :
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.86 sec <<< FAILURE!
testAfterPropertiesSet(org.jasig.cas.util.AutowiringSchedulerFactoryBeanTests) Time elapsed: 0.805 sec <<< ERROR!
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobDetailTicketRegistryCleaner' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.apache.commons.collections.SetUtils.orderedSet(Ljava/util/Set;)Ljava/util/Set;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1403)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:545)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)

Pouvez vous m'aider ?
Merci

Même erreur

Posté par Raphael le 30/05/2010 17:38
J'ai exactement la même erreur que vous.
SI jamais quelqu'un a un solution...

Bon tuto - Utilisez la version 3.3.5

Posté par Daouda ILBOUDO le 15/07/2010 09:07
Ce tutoriel marche à la perfection avec la version 3.3.5 de cas (cas-server-3.3.5).
Au fait dans la version 3.4.2 ils ont supprimer une methone appler init dans une de leur classe ou servlet nommée AutowiringSchedulerFactoryBean; du coup il n'est plus possible de l'initialiser. Peut etre qu'en lisant leur docs, on trouveras comment faire marcher la version 3.4.2.
MAIS AU RISQUE DE ME REPETER POUR L'INSTANT AVEC CE TUTO, J'AI REUSSI A DEPLOYER LA VERSION 3.3.5 SUR UNE DEBIAN LENNY 5.0.4.

ENJOY

Bon tuto - Utilisez la version 3.3.5

Posté par Daouda ILBOUDO le 15/07/2010 09:13
Ce tutoriel marche à la perfection avec la version 3.3.5 de cas (cas-server-3.3.5).
Au fait dans la version 3.4.2 ils ont supprimer une methone appler init dans une de leur classe ou servlet nommée AutowiringSchedulerFactoryBean; du coup il n'est plus possible de l'initialiser. Peut etre qu'en lisant leur docs, on trouveras comment faire marcher la version 3.4.2.
MAIS AU RISQUE DE ME REPETER POUR L'INSTANT AVEC CE TUTO, J'AI REUSSI A DEPLOYER LA VERSION 3.3.5 SUR UNE DEBIAN LENNY 5.0.4.

ENJOY

tuto

Posté par poufpouf le 28/03/2011 13:38
Bonjour
en suivant ce tuto, mais avec cas 3.4.6, j'ai réussi à le faire démarrer, au prix de quelques modifications dans le pom.xml:
le connecteur jdbc doit devenir "runtime" et non plus "provided", et j'ai dû exclure quelques dépendances de log4j (jmxtools et jmxri). Par contre, je ne sais pas trop à quoi elles correspondent, j'ai trouvé le conseil sur le web, n'étant pas du tout spécialiste maven ou java :p.

BlogBang
Navigation
 

Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio