Projet pam_cas
Pages enfant
  • 02 - Interfaçage Cyrus-imap avec CAS

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.

Sommaire

Problématique

Le portail doit pouvoir proposer un canal permettant d'apporter des informations sur la messagerie de l'utilisateur (nombre de mails non lus, ...).
Il est probable que ce canal doive lancer un webmail externe (IMP ?) lorsque l'utilisateur désire utiliser sa messagerie d'une manière plus intensive.

...

Personnalisation du script

 

Bloc de code

$cas_hostname="auth.univ.fr";         // c'est l'url du serveur CAS
   $cas_port=443;                        // le port d'accès https au serveur CA
   $cas_uri='';                          // l'uri de base du serveur CAS
   $imap_server="mail.univ.fr";          // le serveur imap à tester
   $imap_port=143;                       // le port imap
   $imap_box="INBOX";                    // le préfixe des boites IMAP
   $imap_service="imap://$imap_server";  // le service passé pour la récupération du PT. Doit être identique
                                         // au service paramétré dans pam-cas

Le 'service' passé au serveur CAS sera ici implicitement imap://mail.univ.fr. Si cela ne convient pas , écraser la variable $imap_service avec l'URL de service désiré.

Installation du script

Il faut bien sûr en préalable l'installation de phpCAS, avec ses pré-requis.

...

Si un PT est obtenu, mais que la connexion imap de fonctionne pas, redemander un nouveau PT.
En dessous du bouton "Ouvrir une connexion imap avec le PT courant", s'affiche une url du genre :

Bloc de code

https://auth.univ.fr:443/proxyValidate?ticket=PT-168270-aG...&service=imap://mail.univ.fr

Tenter de valider 'à la main' ce PT :
Depuis un serveur ayant un acces https vers le serveur CAS (le serveur imap est un bon candidat), lancer :

Bloc de code

wget --ca-certificate=/Cert/ac-racine.pem -O /tmp/cas.log "https://auth.univ.fr:443/proxyValidate?ticket=PT-168270-aG...&service=imap://mail.univ.fr"

...

Vous devez obtenir quelque chose comme celà dans le fichier /tmp/cas.log :

Bloc de code

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
  <cas:authenticationSuccess>
    <cas:user>vmathieu</cas:user>
    <cas:proxies>
      <cas:proxy>https://infocri.univ-nancy2.fr/~vmathieu/CAS/casimap.php</cas:proxy>
    </cas:proxies>
  </cas:authenticationSuccess>
</cas:serviceResponse>

Rem : il est possible de remplacer l'option --ca-certificate=/Cert/ac-racine.pem par --no-check-certificate lors du wget ; dans ce cas, un warning sera affiché.

Difficultés coté client imap

...

Ca semble relativement aisé au niveau du portail. Il est probable que ce ne soit pas aussi simple au niveau IMP à la fois pour cet aspect, et pour le promouvoir en proxy CAS.

...

Optimisation poussée

La mise en oeuvre précédente s'est faite sans aucune modification de code à tous niveaux.

On pourrait envisager une optimisation spécifique à notre projet, en Un patch modifiant le fonctionnement du cache de saslauthd.Actuellement, il associe un 'mot de passe' (éventuellement donc, un PT) du démon saslauthd est proposé,  permettant d'associer plusieurs 'mots de passe' à un utilisateur.
On pourrait envisager qu'il associe 3 mots de passe à une personne :

  • le mot de passe habituel (dans notre cas, le mot de passe LDAP)
  • le PT venant du portail
  • le PT venant du webmail

Ca peut s'implémenter avec cyrus-imap, sans modification du source :

il est possible d'avoir 3 'instances' IMAP en attente sur 3 ports différents, et avec 3 caches différents (3 instances de saslauthd).

Avertissement

Plutôt que de patcher saslauthd, il est maintenant plus simple d'utiliser la fonctionnalité "cacheDirectory" de la dernière version de esup-pam-cas.

 Donc, une instance sur les ports POP et IMAP traditionnels, pour les clients de messagerie standards, une instance dédié au webmail et une instance dédiée au portail.

Annexe : cinématique

Les schémas joints montrent la cinématique de l'authentification imap, dans différents cas.

...