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.

...

Un navigateur bien configuré et possédant des credentials Kerberos valides doit maintenant se connecter au serveur CAS sans aucune interaction....

Ajout de l'alimentation Kerberos

L'alimentation Kerberos désigne le processus qui permet d'alimenter un royaume Kerberos avec comptes utilisateurs lors de la connexion au serveur CAS. Elle peut être utilisée pour amorcer le remplissage du royaume à partir d'un annuaire LDAP, ce que nous montrons dans cet exemple.

Configuration de Kerberos

En premier lieu, déclarer le principal qui servira à la mise à jour du royaume Kerberos (ici cas/admin) et l'exporter dans le fichier /etc/cas-admin.keytab :

Bloc de code
[root@cas-kerb ~]# kadmin -p root/admin
Authenticating as principal root/admin with password.
Password for root/admin@UNIV-RENNES1.FR:
kadmin:  addprinc -randkey cas/admin
WARNING: no policy specified for cas/admin@UNIV-RENNES1.FR; defaulting to no policy
Principal "cas/admin@UNIV-RENNES1.FR" created.
kadmin:  ktadd -k /etc/cas-admin.keytab cas/admin
Entry for principal cas/admin with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/cas-admin.keytab.
Entry for principal cas/admin with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/cas-admin.keytab.
Entry for principal cas/admin with kvno 3, encryption type DES with HMAC/sha1 added to keytab WRFILE:/etc/cas-admin.keytab.
Entry for principal cas/admin with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/cas-admin.keytab.
kadmin:  exit
[root@cas-kerb ~]#

Intégration du module cas-server-integration-kerberosfeed

L'alimentation du royaume Kerberos se fait en utilisant le module cas-server-integration-kerberosfeed (téléchargeable ici), qui doit être installé au même niveau que les autres modules du projet puis compilé (lancer la commande mvn package install depuis le répertoire du module).

Il faut ensuite ajouter la dépendance de cas-server-rennes1 vers cas-server-integration-kerberosfeed en ajoutant dans le fichier pom.xml du module cas-server-rennes1 les lignes suivantes :

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

Configuration de CAS

On utilise la classe KerberosFeedAuthenticationHandlerWrapper pour enrober l'appel des authenticationHandlers pour lesquels on souhaite mettre en place une alimentation du royaume Kerberos. Les lignes suivantes de src/main/webapp/WEB-INF/deployerConfigContext.xml

Bloc de code
xml
xml
<bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" >
  <property name="filter" value="uid=%u,ou=people,dc=univ-rennes1,dc=fr" />
  <property name="contextSource" ref="contextSource" />
</bean>

Seront ainsi remplacées par :

Bloc de code
xml
xml
<bean class="org.esupportail.cas.adaptors.kerberosfeed.KerberosFeedAuthenticationHandlerWrapper" >
  <property name="authenticationHandler">
    <bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" >
      <property name="filter" value="uid=%u,ou=people,dc=univ-rennes1,dc=fr" />
      <property name="contextSource" ref="contextSource" />
    </bean>
  </property>
  <property name="config" ref="kerberosFeedConfig" />
  <property name="registry" ref="kerberosFeedRegistry" />
</bean>

Lorsqu'un authenticationHandler est enrobé de la sorte et que l'authentification du bean enrobé (ici FastBindLdapAuthenticationHandler) s'effectue avec succès, alors elle est suivie de l'ajout dans le royaume de l'utilisateur à l'aide d'une commande kadmin, en utilisant la configuration donnée par le bean kerberosFeedConfig :

Bloc de code
xml
xml
<bean 
    id="kerberosFeedConfig"  
    class="org.esupportail.cas.adaptors.kerberosfeed.KerberosFeedConfig">
  <property name="realm" value="UNIV-RENNES1.FR" />
  <property name="principal" value="cas/admin" />
  <property name="useKeytab" value="true" />
  <property name="keytab" value="/etc/admin.keytab" />
  <!-- property name="password" value="secret" /-->
  <property name="passwordAllowedChars" 
    value="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&amp;~#{([-|`\\_^@)]=+}$%*!:/;.,?&gt;&lt;" />
</bean>

La propriété password n'est utilisée que lorsque useKeytab est positionnée à false, dans le cas ci-dessous on utilise la keytab générée précédemment.

L'ajout d'un utilisateur déjà présent dans le royaume Kerberos provoque une erreur de kadmin, qui n'est pas prise en compte (rien n'est fait dans ce cas, l'erreur n'est pas dommageable). Néanmoins, afin de ne pas rejouer l'ajout d'un utilisateur déjà présent dans le royaume, le bean KerberosFeedAuthenticationHandlerWrapper s'appuie sur un registre (propriété registry), dans lequel il mémorise les utilisateurs déjà ajoutés dans le royaume. Par défaut (lorsque la propriété registry n'est pas positionnée), la mémorisation est faite en mémoire (implémentation InMemoryRegistryImpl) et les informations sont perdues à chaque redémarrage du serveur CAS. On peut aussi utiliser un registre basé sur BerkeleyDb, dont les informations seront permanentes :

Bloc de code
xml
xml
<bean 
    id="kerberosFeedRegistry"  
    class="org.esupportail.cas.adaptors.kerberosfeed.registry.BerkeleyDbRegistryImpl">
  <property name="dbPath" value="/tmp" />
</bean>

Les informations seront ici stockées dans le répertoire /tmp.