Pages enfant
  • CAS (Central Authentication Service) (esup 4)

 

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).

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

esup.properties
################################################################################
## Configuration Serveur UPortal                                              ##
################################################################################
environment.build.uportal.server=ent.univ.fr
environment.build.real.uportal.server=ent1.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

Voici à quoi correspondent les différentes propriétés :

Propriétés uPortal

Définition

environment.build.uportal.server

Hostname du serveur uPortal

environment.build.real.uportal.server

Utilisé pour le load balancing. Par défaut mettre la même adresse que environment.build.uportal.server. La configuration exacte est expliquée dans la section dédiée au load balancing.

environment.build.uportal.protocol

Protocole utilisé pour contacter le serveur uPortal (http ou https)

environment.build.uportal.context

Nom de la webapp du serveur uPortal

environment.build.real.uportal.contextUtilisé pour le load balancing. Par défaut mettre la même adresse que environment.build.uportal.context. La configuration exacte est expliquée dans la section dédiée au load balancing.

environment.build.uportal.email.fromAddress

Adresse utilisée pour envoyer des messages électronique. Elle sera visible des destinataires

Propriétés CASDéfinition

environment.build.cas.server

Hostname du serveur CAS

environment.build.cas.protocol

Protocole utilisé pour contacter le serveur CAS (http ou https)

environment.build.cas.context

Nom de la webapp du serveur CAS

 

  • Toutes les propriétés "cas" servent à configurer la manière de contacter le serveur CAS
  • Toutes les propriétés "uportal" servent à configurer le service pour lequel on appelle le CAS. Concrètement, il s'agit de l'URL de redirection une fois l'authentification effectuée

De la sécurité

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.properties

environment.build.cas.server=ent.univ.fr
environment.build.cas.protocol=https
environment.build.cas.context=/cas

Le serveur CAS (version bundle !) pourra être testé à l'URL suivante : https://ent.univ.fr/cas Il ne redirigera nulle part puisqu'aucun service ne lui a été demandé. L'utilisateur test est admin/admin.

Désactiver le cas embarqué.

    1. Commenter la ligne "<module>cas</module>" dans le fichier uportal-portlets-overlay/pom.xml.

      <modules>
          ...
          <module>BookmarksPortlet</module>
          <!-- module>cas</module -->
          <module>cas-proxy-test-portlet</module>
          ...
      </modules>
      
    2. Commenter la dépendance CAS dans le fichier uportal-ear/pom.xml.

      <!--
      <dependency>
          <groupId>org.jasig.portal.portlets-overlay</groupId>
          <artifactId>cas</artifactId>
          <version>${project.version}</version>
          <type>war</type>
      </dependency>
      -->
      

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 :

PATH.TO.WEBAPPS/cas-proxy-test-portlet/WEB-INF/classes/configuration.properties
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

 

PATH.TO.WEBAPPS/cas-proxy-test-portlet/WEB-INF/context/applicationContext.xml
   <!-- 
        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">
        <constructor-arg index="0" value="${cas.server.base.url}" />
    </bean>

Connecter CAS Bundle et LDAP

Afin de connecter CAS bundle et LDAP, il faut procéder aux modifications suivantes (exemple de configuration - le FastBind ne fonctionne pas avec tous les LDAP) :

  1. Ajout dans le fichier pom.xml du cas bundle :

    uportal-portlets-overlay/cas/pom.xml
    <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>
  2. Ajouts dans le fichier deployerConfigContext.xml du cas bundle :

    uportal-portlets-overlay/cas/src/main/webapp/WEB-INF/deployerConfigContext.xml
    <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>
    uportal-portlets-overlay/cas/src/main/webapp/WEB-INF/deployerConfigContext.xml
    </beans>
        ...
        <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
            <property name="urls">
                <list>
                    <value>${environment.build.ldap.url}</value>
                </list>
            </property>
    		<property name="userDn" value="${environment.build.ldap.userName}"/>
            <property name="password" value="${environment.build.ldap.password}"/>
            <property name="pooled" value="${environment.build.ldap.pooled}"/>
    	 </bean>
        ...
    </beans>

  • Aucune étiquette