cicas : plugin d’authentification avec CAS pour SPIP

Le plugin « cicas » permet d’utiliser un serveur SSO (Single Sign-On), basé sur CAS (Central Authentication Service), pour s’authentifier dans SPIP. Il permet en particulier un mode d’authentification hybride.

Le plugin « cicas » permet d’utiliser un serveur SSO (Single Sign-On), basé sur CAS (Central Authentication Service), pour s’authentifier dans SPIP.

Pourquoi un plugin supplémentaire sur ce sujet ?

Il existe déjà un plugin « Une authentification SSO » qui permet d’utiliser le serveur SSO (Single Sign-On) CAS, pour authentifier les accès à l’espace public de SPIP. Toutefois, il ne correspond pas à certains besoins spécifiques auxquels le présent plugin doit répondre.

Rappel sur le Single Sign-On avec CAS

Une présentation sur le Single Sign-On avec CAS a été rédigée, par les auteurs du client PHP pour CAS (phpCAS), et est consultable à l’adresse suivante :
http://perso.univ-rennes1.fr/pascal.aubry/presentations/cas-jres2003/cas-jres2003-article.php

Les objectifs de ce plugin

L’objectif est d’utiliser le login et le mot de passe stocké dans le serveur d’authentification au lieu de ceux qui sont stockés dans SPIP. Cela évite à l’utilisateur de gérer ses mots de passe dans plusieurs sites (ou applications) et cela lui évite de s’authentifier à nouveau lorsqu’il passe d’un site à un autre.

Les fonctionnalités de ce plugin

On peut paramétrer ce plugin pour offrir une authentification CAS ou bien une authentification hybride (SPIP ou CAS). Dans ce dernier cas, chaque fois qu’il souhaitera s’authentifier, l’utilisateur pourra choisir soit de s’authentifier comme d’habitude avec SPIP, soit de cliquer sur le lien « Utiliser l’authentification centralisée » pour s’authentifier avec CAS.

Par paramétrage on peut choisir de comparer l’identifiant renvoyé par le serveur CAS au contenu du champ de SPIP contenant l’adresse électronique des auteurs, ou bien à celui contenant le login des auteurs.

Si plusieurs auteurs ont, dans SPIP, la même adresse de messagerie, il est nécessaire de savoir lequel retenir. Aussi, parmi les auteurs disposant de la même adresse de messagerie, celui qui a le plus de droits dans SPIP sera retenu. Si deux auteurs ont les mêmes droits, le premier par ordre alphabétique de nom d’auteur dans SPIP, sera retenu. Les auteurs dont le statut est « à la poubelle » ne seront jamais pris en compte.

L’authentification sur le site public redirige ensuite vers la page en cours, idem lors de la déconnexion.

Un paramétrage par fichier est possible. Il est prioritaire sur le paramétrage du plugin dans l’espace privé. Cela facilite le déploiement sur un grand nombre de sites.

Si un site est publié simultanément sur deux réseaux (par exemple intranet et internet) et que l’on veut pouvoir s’authentifier sur le site dans les deux cas, il peut être souhaitable que le serveur CAS soit accessible sur intranet et sur internet. Aussi, il convient de déterminer la provenance de l’auteur (intranet, internet, …) et d’aiguiller automatiquement sur l’adresse corrélative du serveur CAS (intranet, internet, …). Cette possibilité est offerte uniquement via le paramétrage par fichier.

Compatibilité

CICAS version 3.0 est compatible avec SPIP 3.0, 3.1, 3.2, 4.0, 4.1, 4.2.
CICAS version 3.0 est compatible avec PHP 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1.
Il surcharge une seule fonction de SPIP (« logout »).

Installation

Le plugin « cicas » s’installe comme tous les plugins, cf. http://www.spip.net/fr_article3396.html
Il contient le client phpCAS, ce qui évite de devoir installer ce dernier.
Il évite d’installer « composer » (gestionnaire de dépendances et chargeur automatique de classes) et « logger » (alors que ce sont des pré-requis de phpCAS version 1.6.1).

Le client phpCAS nécessite certains prérequis relatifs à PHP.

Paramétrage

Le paramétrage s’effectue dans le menu [Configuration] de SPIP, sous menu [Configurer CAS] :

Il est impératif sélectionner en premier le mode d’authentification intitulé "CAS ou SPIP" afin de vérifier, sans risque, le bon fonctionnement de l’authentification CAS.

Il convient de renseigner l’adresse du serveur CAS (sans la faire précéder de http://), le répertoire éventuel du serveur CAS (par exemple : /cas) et le port du serveur CAS (en général : 443).

Si l’identifiant renvoyé par le serveur CAS est l’adresse électronique de l’auteur, il est nécessaire de s’assurer que, dans SPIP, l’adresse de messagerie électronique de chaque auteur est bien renseignée.

Utilisation de l’authentification CAS
Au lieu d’accéder au formulaire d’authentification de SPIP, l’utilisateur est redirigé vers le formulaire d’authentification du serveur CAS.

Utilisation de l’authentification Hybride
Le plugin ajoute un lien « Utiliser l’authentification centralisée » dans le formulaire d’authentification de SPIP.

Chaque fois qu’il souhaitera s’authentifier, l’utilisateur pourra choisir soit de s’authentifier comme d’habitude avec SPIP, soit de cliquer sur le lien « Utiliser l’authentification centralisée » pour s’authentifier avec l’authentification centralisée.

Version 1.1 du plugin

La version 1.1 du plugin apporte :
-  La compatibilité avec la version 5.3 de PHP.
-  Pour mémoire, le plugin était déjà compatible avec la version 2.1 de SPIP.
-  Par défaut, l’ordre de recherche du HOST dans les variables HTTP est celui du client phpCAS. Si les pratiques de l’hébergeur ne sont pas compatibles avec l’ordre du client phpCAS, on peut définir dans le fichier de paramétrage l’ordre à prendre en compte.
-  La compatibilité avec d’anciennes adresses email est désormais paramétrable par fichier.
-  A titre de réservation, ajout d’une possibilité de pipeline.
-  L’utilisation de la version 1.1 du client phpCAS.

Version 1.2 du plugin

La version 1.2 du plugin corrige un bug.

Version 1.3 du plugin

La version 1.3 du plugin apporte l’utilisation de la version 1.2 du client phpCAS.

Version 1.32 du plugin

La version 1.32 du plugin apporte la compatibilité avec les versions 3.3.5 (et supérieures) des serveurs CAS.

Version 1.41 du plugin

La version 1.41 du plugin apporte l’utilisation de la version 1.3.1 du client phpCAS. Elle apporte également la compatibilité avec SPIP 3.

Version 1.44 du plugin

La version 1.44 du plugin évite un message inutile dans les fichiers de log de SPIP.

Version 1.5 du plugin

Prise en compte d’une évolution de SPIP 2.1.14 (logout en 2 étapes) dans la surcharge du fichier action/logout.php.
Passage à la version 1.3.2 de phpcas.
Possibilité de contrôler l’unicité de l’email lors de la création / modification d’un auteur (sauf si l’identifiant SSO est le login). Pour cela, il faut déclarer la constante ’_CICAS_ANTI_HACK’ dans le fichier config/mes_options.php avec la valeur ’oui’.

Version 1.6 du plugin

Le client PHP pour CAS (phpCAS), qui est livré avec le plugin, offre la possibilité d’utiliser une adresse pour le serveur CAS et une autre adresse lors de la validation du ticket, c’est-à-dire lorsque SPIP va interroger le serveur CAS.
La version 1.6 du plugin CICAS permet d’exploiter cette possibilité, via trois variables à ajouter dans le fichier de paramétrage. Ces trois variables sont décrites dans l’annexe du document de description du plugin, qui a été mise à jour corrélativement.

Version 1.8 du plugin

Dans le cas où le formulaire #LOGIN_PUBLIC était utilisé dans un squelette autre que celui de la page « login » (par exemple dans le squelette rubrique ou article si on utilise un certain plugin d’accès restreint), l’adresse de la page ne comprenait pas le paramètre « &url=... » comme c’est le cas pour la page « login ». Aussi, la redirection après authentification, vers une page particulière, ne pouvait pas s’effectuer. La version 1.8 de CICAS prend en compte désormais ce cas particulier.

Version 2.0 du plugin

  • Compatibilité avec SPIP 3.1.
  • Utilisation de la dernière version (1.3.4) de la librairie phpCAS.
  • Possibilité d’une protection anti robot d’indexation pour le formulaire de login, via la constante _CICAS_ANTI_BOT à placer dans un fichier d’options avec la valeur ’oui’.
  • Possibilité d’offrir à l’utilisateur le choix entre plusieurs serveurs CAS.
  • Possibilité de créer un auteur à la volée.

Version 2.1 du plugin

  • Compatibilité avec SPIP 3.2.
  • Utilisation de la dernière version (1.3.5) de la librairie phpCAS.

Pour plus de détails, se reporter à la documentation (mise à jour) du plugin CICAS jointe au présent article.

Version 2.2 du plugin

  • Compatibilité (sous SPIP 3.2) avec PHP 7.0 et 7.1.

Version 2.4 du plugin

  • Compatibilité avec PHP 7.2, 7.3 et 7.4.

Version 2.5 du plugin

  • Compatibilité avec SPIP 4.0

Version 2.6 du plugin

  • Compatibilité avec PHP 8.0 et 8.1
  • Compatibilité avec SPIP 4.1

Version 3.0 du plugin

  • Utilisation de la dernière version (1.6.1) de la librairie phpCAS.
  • Compatibilité avec SPIP 4.2
  • Nécessite une version 7 (ou supérieure) de PHP. En effet, la librairie phpCAS version 1.6.1 nécessite PHP version 7 ou supérieure.

Discussion

34 discussions

  • 3

    Bonjour,

    j’ai légèrement modifié le plugin pour ajouter dans la configuration un champ permettant d’ajouter une durée d’expiration pour le cookie (en secondes).

    Si la valeur d’expiration n’est pas saisie, alors le cookie est valable jusqu’à la fin de la session SPIP (comme c’était le cas auparavant).

    Cordialement,

    • Bonjour,

      S’il s’agit du cookie de session de SPIP, le fait de vouloir raccourcir sa durée n’a pas de rapport avec l’authentification centralisée. En effet, cela constitue une demande d’évolution de SPIP, qui est indépendante du mode d’authentification (SPIP, LDAP, etc.).

    • En fait mon serveur CAS a une durée de validité du ticket sur x jours (par exemple 5 jours) .

      Cette modification de ce plugin permet aussi à SPIP de garder la connexion ouverte sur ces x jours.
      Je suis conscient que cela n’est pas très sécure mais elle permet de répondre à mon besoin.

    • Equipement

      Le plugin CICAS délègue à SPIP la construction de la session. Aussi c’est SPIP qui gère la durée de son cookie de session.

    Répondre à ce message

  • 6

    Re...

    Bon j’ai un peu avancé dans ma config...
    Plutôt pas mal, mais j’ai un soucis...
    J’ai l’impression que par défaut cicas renvois vers l’espace auteur, et du coup que l’on ne peut pas l’utiliser pour identifier des visiteurs...

    J’ai fais quelques essais, mais si vous avez une piste !

    Merci en tout cas...

    PS : pour mon problème de création de compte, j’ai finalement utilisé peuplement LDAP, il me suffira de le lancer une foius de temps en temps, et ça devrait faire l’affaire.... mais sinon, ça pourrait être une mise à jour intéressante.

    Eric

    • equipement

      Bonjour,

      Pour que phpCAS puisse rediriger sur la page en cours du site public, il faut que le lien permettant de s’authentifier (sans entrer dans l’espace privé) précise l’URL de la page en cours dans la variable ’url’.

      Exemple de lien :

      <a href="[(#URL_PAGE{login}|parametre_url{url,#SELF})]">Authentification</a>
    • OK, donc, si je met le lien qui arrive sur la page login public (normalement) :
      [(#URL_PAGElogin|parametre_urlurl,#SELF)]
      Elle se transforme d’elle même en :
      http://domaine.org/spip.php?page=login&url=./

      Si je clique dessus, j’ai normalement la boite de dialogue de connexion de spip, mais qui est du coup « usurpée » par mon cas.

      Mon CAS lui prend le dessus, et me propose son identification.... sauf quand dans l’URL, j’ai tous les / les & ? qui ont étés transformés... 5c’est le seul site qui me fait ça)...

      Du coup, quand l’identification est OK, il n’arrive pas à trouver la page correspondante, normal...

      Par contre....
      Je vais sur un site, je m’identifie par le cas, et dionc création de ticket.
      Je reviens sur SPIP, clic qur connexion, ça fonctionne !

    • equipement

      phpCAS encode le contenu de la variable ’url’ et c’est normal.

      Par exemple, si l’on se trouve sur la rubrique 1, le lien vers l’authentification est du type :

      http://monsite/spip.php?page=login&url=spip.php%3Frubrique1

      phpCAS encode alors le contenu de la variable url. L’adresse dans le navigateur, lorsque le formulaire d’authentification CAS apparaît, est du type :

      https://adresseduserveurcas/login?service=http%3A%2F%2Fmonsite%2Fspip.php%3Fpage%3Dlogin%26url%3Dspip.php%253Frubrique1
    • OK, cool de répondre rapidement.

      Coté connexion, j’ai réglé le problème en faisant une page qui se reload automatiquement le cas avec la bonne adresse.
      -  > connexion cas -> affichage de la page -> reload automatique sur connexion SPIP

      Comme ça, ça fonctionne...

      La déconnexion, j’ai pas encore trouvé... Je vais surement explorer le code pour voir si je ne peux pas rentré en dur mon adresse de manière à ce qu’il ne me ré-encode pas l’URL...

      Éric

    • equipement

      Le plugin « CICAS » fonctionne parfaitement depuis plusieurs mois sur plusieurs hébergeurs différents. Aussi, le problème est vraisemblalement ailleurs.

    • En effet, il fonctionne bien...

      Je ne sais pas pourquoi mon CAS n’est pas capable d’utiliser des adresses encodées...

      Bref, j’ai trouvé une solution pour la connexion, et la déconnexion, ça va pas mal quand même !

      Merci pour le boulot et les coups de main !

      Éric

    Répondre à ce message

  • equipement

    Bonjour,

    La version 1.1 du plugin CICAS, qui est jointe à cet article, offre un pipeline intitulé « cicas » qui est appelé si l’utilisateur d’est bien authentifié sur CAS mais que son compte n’a pas été trouvé dans SPIP.

    inc/cicas_login.php (ligne 108) :
        if (!isset($auteur['id_auteur'])) {
            // Envoyer au pipeline
            $auteur = pipeline('cicas',
                array(
                    'args' => $ci_cas_userid,
                    'data' => array()
                )
            );
        }   

    Aussi, vous pouvez créer un plugin, qui utilise le pipeline « cicas », et qui interroge LDAP et crée automatiquement, le cas échéant, une entrée dans la table spip_auteurs.

    Répondre à ce message

  • Salut,

    Ce plugin a une limite qui me semble vraiment dommage : si l’utilisateur n’existe pas... il n’est pas créé !
    Ça serait tellement bien...

    Ou alors faut-il l’utiliser conjointement avec un script qui remplis les users en fonction du ldap ???

    Éric

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom