CAS et Kerberos
Pages enfant
  • Migration de l'authentification de LDAP à Kerberos (archive)

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Selon les procédures en vigueur dans l'établissement, il est également possible de créer le compte dans le royaume Kerberos lors Kerberoslors de la première validation du compte à travers une interface web dédiée (comme cela est fait pour l'interface Sésame à l'université de Rennes 1).

...

L'alimentation du royaume Kerberos est Kerberosest faite par un wrapper de AuthenticationHandler ; de cette manière, elle peut être activée pour pour certains handlers seulement.

La configuration de l'accès au serveur Kerberos est mutualisée dans un bean :

Modifications des sources

On crée tout d'abord un module supplémentaire nommé cas-server-integration-kerberosfeed en installant les sources du zip attaché.

On ajoute le nouveau module dans la liste des modules de /pom.xml :

Bloc de code
xml
xml
<modules>
  <module>cas-server-core</module>
  [...]
  <module>cas-server-webapp</module>
  <module>cas-server-integration-kerberosfeed</module>
</modules>

On joute également la propriété skipTests au plugin maven-sunfire pour éviter de rejouer tous les tests à la compilation :

Bloc de code
xml
xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <skipTests>true</skipTests>
    <includes>
      <include>**/*Tests.java</include>
    </includes>
    <excludes>
      <exclude>**/Abstract*.java</exclude>
    </excludes>
  </configuration>
</plugin>

Pour compiler le nouveau module (nécessaire après tout changement), exécuter :

Bloc de code
mvn \-pl cas-server-integration-kerberosfeed install

Ajouter une dépendance du module cas-server-webapp vers le nouveau module dans /cas-server-webapp/pom.xml :

Bloc de code
xml
xml
<dependency>
  <groupId>org.jasig.cas</groupId>
  <artifactId>cas-server-integration-kerberosfeed</artifactId>
  <version>${project.version}</version>
</dependency>

A chaque fois que l'on modifie la configuration du module cas-server-webapp, exécuter :

Bloc de code
mvn -pl cas-server-webapp package

Cela créee le war /cas-server-webapp/target/cas.war qui peut être déployé.

Configuration

Les beans ci-dessous sont dans le fichier /cas-server-webapp/src/main/webapp/WEB-INF/deployerConfigContext.xml.

On remplace tout d'abord le bean FastBindLdapAuthenticationHandler par :

Bloc de code
xml
xml
<bean class="org.esupportail.cas.adaptors.kerberosfeed.KerberosFeedAuthenticationHandlerWrapper" >
  <property name="authenticationHandler">
    <bean
Bloc de code
<bean id="kerberosConfig"  class="org.esupportailjasig.cas.adaptors.kerberosfeedldap.KerberosFeedConfigFastBindLdapAuthenticationHandler" >
      <property name="realmfilter" value="UNIV-RENNES1.FRuid=%u,ou=people,dc=univ-rennes1,dc=fr" />
      <property name="principalcontextSource" valueref="root/admincontextSource" />
    </bean>
  </property>
  <!--
   | The configuration used to feed the Kerberos Realm, mandatory.
  -->
  <property name="useKeyTabconfig" valueref="truekerberosFeedConfig" />
  <!--
   | The registry used to store the usernames of the users that have already been added
   | to the realm. Defaults to an 'in memory' implementation where addings will be
   | lost on server startup.
  -->
  <property name="keytabregistry" valueref="/etc/cas.keytabkerberosFeedRegistry" />
</bean>

Si l'on veut alimenter le royaume Kerberos à partir des utilisateurs authentifiés dans l'annuaire LDAP, on utilisera l'AuthenticationHandler suivant :

Le bean kerberosFeedConfig mutualise la configuration de l'accès au serveur Kerberos :

Bloc de code
xml
xml
<!--
   | The configuration used to feed the Kerberos Realm.
   | The values below are used to perform a bash kadmin command.
  --><bean id="kerberosFeedConfig" 
Bloc de code
<bean class="org.esupportail.cas.adaptors.kerberosfeed.KerberosFeedAuthenticationHandlerWrapper" KerberosFeedConfig">
  <!--
   | The name of the Kerberos realm, mandatory.
  -->
  <property name="realm" value="authenticationHandler">
    <bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" >
    UNIV-RENNES1.FR" />
  <!--
   | The name of the principal used to authenticate in kadmin, defaults to cas/admin.
  -->
  <property name="principal" value="cas/admin" />
  <!--
   | Set this property to true to use a keytab to authenticate in kadmin (preferred), or false to use
   | a password. Defaults to true.
  -->
  <property name="useKeytab" value="true" />
  <!--
   | The name of the keytab used when useKeytab is set to true (unused otherwise).
   | Defaults to /etc/admin.keytab.
  -->
  <property name="filterkeytab" value="uid=%u,ou=people,dc=univ-rennes1,dc=fr" />
      "/etc/admin.keytab" />
  <!--
   | The password used authenticate in kadmin, defaults to secret (you shall probably
   | change it since kadmin authentication will fail with the default value).
  -->
  <!-- property name="password" value="secret" /-->
  <!--
   | A string that contains the chars allowed for the users' passwords (set to the default here).
  -->
  <property name="contextSourcepasswordAllowedChars" ref="contextSource" />
    </bean>
  </property>value="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&amp;~#{([-|`\\_^@)]=+}$%*!:/;.,?&gt;&lt;" />
</bean>

Enfin le bean suivant est le registre utilisé pour mémoriser les noms des utilisateurs qui ont déjà été alimentés dans le royaume Kerberso (pour ne pas rejour deux fois) :

Bloc de code
xml
xml
<!--
   | The registry used to store the ids of the users that have already been added
   | to the realm. Unlike the default implementation where usernames are backed to
   | memory, the implementation below uses a Berkeley DB and thus is persistent.
  -->
  <bean id="kerberosFeedRegistry"  class="org.esupportail.cas.adaptors.kerberosfeed.registry.BerkeleyDbRegistryImpl">
    <!--
     | The path used to store the data (must be writable by the tomcat user).
     | Defaults to /tmp.
    -->
  <property name="kerberosConfigdbPath" refvalue="kerberosConfig/tmp" />
</bean>

Voir plus loin pour le codex