CAS est couramment utilisé dans les établissements de l'enseignement supérieur et donc chez les partenaires ESUP.
De fait EsupPortail, via le socle uPortal, propose l'intégration de l'authentification CAS (avec identification LDAP).
On note cependant que l'ENT EsupPortail supporte également d'autres modes d'authentification (shibboleth ou directement via LDAP)
Avertissement | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||
|
Remarque | ||
---|---|---|
| ||
Tomcat doit avoir été configuré ! |
CAS, bien que préconisé par ESUP, est un moyen parmi d'autres d'effectuer l'authentification sur le portail.
Il y a plusieurs possibilités d'utilisation de CAS au niveau du package ESUP :
- CAS interne (en bundle avec ESUP). Attention : ce CAS n'est pas préconisé pour un environnement hors développement.
- CAS externe (à installer soi-même) : l'idée étant d'utiliser naturellement le service de CAS pré-existant dans l'établissement.
En environnement de production, il est fortement recommandé de déployer l'application de façon sécurisée en utilisant des certificats et le protocole HTTPS uniquement . (tout comme pour l'ENT).
Le fichier de propriétés
Bloc de code | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
################################################################################ ## Configuration Serveur UPortal ## ################################################################################ environment.build.uportal.server=ent.univ.fr environment.build.real.uportal.server=esup4ent1.univ.fr environment.build.uportal.protocol=https environment.build.uportal.context=/uPortal environment.build.real.uportal.context=/uPortal environment.build.uportal.email.fromAddress=portal4@univ.fr ################################################################################ ## Configuration Serveur CAS ## ################################################################################ environment.build.cas.server=auth.univ.fr environment.build.cas.protocol=https environment.build.cas.context=/cas |
...
Avertissement | ||
---|---|---|
| ||
Le mode HTTP (non sécurisé) est fortement déconseillé en production, que ce soit pour CAS (environment.build.cas.protocol) ou pour le portail (environment.build.uportal.protocol) ! |
Configurer le CAS
...
au niveau de l'ENT
Fichier esup.propertiesUtiliser le CAS embarqué revient à utiliser celui la machine locale qui ne demande pas de connexion sécurisée. Il faut donc configurer les propriétés du serveur CAS comme suit :
Bloc de code |
---|
environment.build.cas.server=localhostent.univ.fr environment.build.cas.protocol=httphttps environment.build.cas.context=/cas |
Les autres propriétés doivent être renseignées en fonction de là où est déployé l'application uPortal.
Le serveur CAS (SEUL version bundle !) pourra être testé à l'URL suivante : httphttps://localhost:8080ent.univ.fr/cas /login. Il ne redirigera nulle part puisqu'aucun service ne lui a été demandé. L'utilisateur test est admin/admin.
Configurer un CAS externe
Il est possible d'utiliser un serveur CAS externe. Cela peut permettre d'héberger le serveur CAS sur une autre machine que celle du portail.
Pour cela, il faut télécharger un serveur CAS. La V3.4.7 est fortement conseillée (le fonctionnement de FastBindLdap n'est autrement pas garanti). La solution la plus simple reste d'utiliser le cas-toolbox de RENATER. Ce toolbox embarque la version 3.4.7 fonctionnelle. À défaut, utiliser INSTALL.txt du zip pour réaliser l'installation :
...
Modifier la configuration du fichier esup.properties :
...
.
...
Désactiver le cas embarqué.
...
Commenter la ligne "<module>cas</module>" dans le fichier uportal-portlets-overlay/pom.xml.
Bloc de code language html/xml <modules> ... <module>BookmarksPortlet</module> <!-- module>cas</module --> <module>cas-proxy-test-portlet</module> ... </modules>
Commenter la dépendance CAS dans le fichier uportal-ear/pom.xml.
Bloc de code language html/xml <!-- <dependency> <groupId>org.jasig.portal.portlets-overlay</groupId> <artifactId>cas</artifactId> <version>${project.version}</version> <type>war</type> </dependency> -->
Configurer les propriétés de logs telles qu'elles l'auraient été dans un CAS embarqué. Pour cela, éditer le fichier suivant, remplacer les balises existantes par celles-ci et remplacer le texte entre crochets par les valeurs issues du fichier esup.properties :
Bloc de code language html/xml title webapps\cas-server-webapp-<version>\WEB-INF\classes\log4j.xml firstline 35 linenumbers true <appender name="cas" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="[environment.build.log.logfileDirectory]/cas.log" /> <param name="DatePattern" value="'.'yyyy-MM-dd-HH" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[${environment.build.host.logicalName}]%5p [%t] %d{MMM/dd HH:mm:ss,SSS} %c{2}.[%x] - %m%n"/> </layout> </appender>
Bloc de code language html/xml title webapps\cas-server-webapp-<version>\WEB-INF\classes\log4j.xml firstline 104 <logger name="org.jasig" additivity="true"> <level value="[environment.build.log.rootLevel]" /> <appender-ref ref="cas" /> </logger> <logger name="com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager"> <level value="[environment.build.log.rootLevel]" /> <appender-ref ref="cas" /> </logger> <!-- WARNING: Setting the flow package to DEBUG will display the parameters posted to the login servlet including cleartext authentication credentials --> <logger name="org.jasig.cas.web.flow" additivity="true"> <level value="[environment.build.log.rootLevel]" /> <appender-ref ref="cas" /> </logger>
Connecter le CAS au LDAP pour le rendre actif. Cf. section ci-dessous.
Utiliser un certificat
Remarque |
---|
Avant de continuer, vous devez disposer d'un couple clé privé/publique valide (Ex: certificat .pem) ! |
Il faut dans un premier temps ajouter ce certificat dans le magasin :
Bloc de code | ||
---|---|---|
| ||
keytool -import -trustcacerts -alias cas_ca -file [full_path_to_the.pem] -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit |
Il faut dans un deuxième temps configurer le serveur pour qu'il accepte les connexions HTTPS. Dans le fichier server.xml, il faut décommenter le bon connecteur et éventuellement ajouter quelques attributs :
Installer CAS (rappel)
Pour installer un CAS de production (si vous n'en avez pas déjà un dans votre établissement) on vous réfère à la documentation ESUP qui lui est spécifique :
http://www.esup-portail.org/display/CAS
Proxy CAS
Le fonctionnement d'un proxy CAS est également expliqué sur le wiki de l'esup-portail.
Le portail embarque par défaut la portlet cas-proxy-test-portlet (nommée PORTLET TEST CAS) qui indique si le portail est correctement configuré pour fonctionner en mode proxy CAS, hors si vous appliquez une configuration autre ou en load balancing par exemple que pour un fonctionnement en local la portlet ne sera pas automatiquement correctement configurée et retournera toujours une erreur de fonctionnement proxy cas, il sera donc nécessaire d'appliquer cette configuration une fois la portlet du pakaging du portail déployée :
Bloc de code | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
cas.server.base.url=https://auth.univ.fr/cas
portal.server.base=https://ent.univ.fr
portal.real.base=https://ent1.univ.fr
portlet.context=cas-proxy-test-portlet
|
Remarque/rappel : on pourra utiliser également ici un system property java pour portal.real.base notamment, cf Apache frontal (esup 4)#Bonnepratique
Bloc de code | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<!--
Validates service and proxy tickets for both the servlet targets and
proxy portlet
-->
<bean id="ticketValidator"
class="org.jasig.cas.client.validation.Cas20ProxyTicketValidator"
p:proxyCallbackUrl="${portal.real.base}/${portlet.context}/proxy/receptor"
p:proxyGrantingTicketStorage-ref="proxyGrantingTicketStorage"
p:acceptAnyProxy="true"> | ||||||||||
Bloc de code | ||||||||||
| ||||||||||
<!-- Define a SSL HTTP/1.1 Connector on port 8443 This connector uses the JSSE configuration, when using APR, the connector should be using the OpenSSL style configuration described in the APR documentation --> <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="D:\ESUP\Certificats\tomcat.jks" keystorePass="changeit"/> |
Enfin, il faut modifier le paramétrage du CAS de la manière suivante :
Bloc de code | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
################################################################################
## Configuration Serveur CAS ##
################################################################################
environment.build.cas.server=localhost:8443
environment.build.cas.protocol=https
environment.build.cas.context=/cas
|
Serveur frontal Apache
Dans un contexte CAS + Tomcat avec un serveur Apache en frontal, il faut bien prendre en compte la configuration ad hoc.
Proxy CAS
...
<constructor-arg index="0" value="${cas.server.base.url}" />
</bean>
|
Ancre CASLDAP CASLDAP
Connecter CAS Bundle et LDAP
...
Ajout dans le fichier pom.xml du cas bundle :
Bloc de code title uportal-portlets-overlay/cas/pom.xml firstline 160 linenumbers true <dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-support-ldap</artifactId> <version>${cas-server.version}</version> <scope>compile</scope> <exclusions> <exclusion> <groupId>org.inspektr</groupId> <artifactId>inspektr-core</artifactId> </exclusion> </exclusions> </dependency>
Ajouts dans le fichier deployerConfigContext.xml du cas bundle :
Bloc de code title uportal-portlets-overlay/cas/src/main/webapp/WEB-INF/deployerConfigContext.xml firstline 120 linenumbers true <property name="authenticationHandlers"> <list> ... <bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" > <property name="filter" value="${environment.build.ldap.uidAttr}=%u,${environment.build.ldap.baseDn}" /> <property name="contextSource" ref="contextSource" /> </bean> </list> </property>
Bloc de code title uportal-portlets-overlay/cas/src/main/webapp/WEB-INF/deployerConfigContext.xml firstline 222 linenumbers true </beans> ... <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="urls"> <list> <value>${environment.build.ldap.url}</value> </list> </property> </bean>
Connecter un CAS Externe et LDAP
Info |
---|
La configuration d'un annuaire LDAP sur un serveur CAS externe est décrite sur le wiki Jasig : https://wiki.jasig.org/display/CASUM/LDAP |
Afin de connecter un CAS externe et LDAP, il faut procéder aux modifications suivantes (exemple de configuration - le FastBind ne fonctionne pas avec tous les LDAP) :
- Ajout dans le fichier pom.xml du cas :
Bloc de code title cas-server-3.5.1/cas-server-webapp/pom.xml firstline 160 <dependency> list> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-support-ldap</artifactId> <version>${cas.version}</version> </dependency>
Remarque Le paramètre ${cas.version} est à remplacer par la version de CAS.
Bloc de code title cas-server-webapp/src/main/webapp/WEB-INF/deployerConfigContext.xml firstline 120 <bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" > property> <property name="filteruserDn" value="${environment.build.ldap.uidAttr}=%u,${environment.build.ldap.baseDn}" userName}"/> <property name="contextSource" ref="contextSource" /> </bean>
Bloc de code title cas-server-webapp/src/main/webapp/WEB-INF/deployerConfigContext.xml firstline 222 <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource" <property name="password" value="${environment.build.ldap.password}"/> <property name="urlspooled"> <list> <value>$ value="${environment.build.ldap.urlpooled}<"/value> </list>> </bean> </property>... </bean>
Remarque Les paramètres suivants sont à remplacer :
${environment.build.ldap.uidAttr}
${environment.build.ldap.baseDn}
${environment.build.ldap.url}
Ces paramètres sont explicités sur la page de configuration LDAP.
beans>
...