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

  • 4
    Vincent

    Bonjour,

    J’ai mise en place le plugin CICAS (version 1.41) mais je rencontre le problème suivant après paramétrages :
    l’adresse URL de mon service d’authentification comporte deux // ( ici en gras) :

    https://cas-uds.grenet.fr//login?service=http%3A%2F%2Fedytem.univ-savoie.fr%2Fspip.php%3Fpage%3Dlogin%26url%3D%252Fecrire%252F%26cicas%3Doui

    et je suis donc obligé d’en enlever un pour que mon authentification fonctionne.

    Avez-vous eu ce problème et avez-vous une idée pour le résoudre ?

    Merci d’avance pour vos réponses,
    Bien cordialement,
    Vincent

    SPIP 2.1.10
    CICAS 1.41

    • Equipement

      Bonjour,
      L’adresse https://cas-uds.grenet.fr/login?service=... fonctionne avec un seul slash avant « login ».
      La RFC3986, qui spécifie la syntaxe des URL, mentionne le double slash uniquement au début de l’adresse.
      Cordialement
      Equipement

    • Bonjour,

      En effet l’adresse ne fonctionne bien qu’avec un seul slash.
      Mais en fait le problème est que lorsque j’utilise l’authentification centralisée avec Cicas l’adresse d’authentification proposée en comporte deux ce qui impose d’en enlever un manuellement.
      J’ai pourtant rempli correctement les informations demandées concernant les paramètres du serveur cas en question (nom du serveur, dossier CAS : / , port utilisé : 443).
      J’ai aussi fait cela sur une installation vierge de SPIP pour mettre de côté d’éventuels interactions avec d’autres plugins, je rencontre le même problème.

      Je suis donc bloqué avec l’utilisation de ce plugin et je suis surpris d’être le seul à rencontrer cette difficulté.

      Merci d’avance pour vos réponses qui pourraient résoudre ce problème.
      Bien cordialement,
      Vincent

      SPIP 2.1.10
      CICAS 1.41

    • Bonjour,
      Une piste consisite à essayer la nouvelle version CICAS 1.42 jointe à cet article et de ne rien mettre dans « dossier CAS ». Merci de m’indiquer si cela règle le problème.
      Cordialement
      Equipement

    • Merci vraiment pour votre réactivité.
      En effet sur la version 1.41 de CICAS, j’étais obligé de mettre un chemin pour le répertoire du serveur CAS et je mettais donc / .
      Maintenant en ne mettant rien, ce qui est possible avec la version 1.42, cela marche. Le problème est réglé.

      Bien cordialement,
      Vincent

    Répondre à ce message

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

    Répondre à ce message

  • 8

    Salut,

    J’ai le même problème que LC, l’authentification cicas fonctionne mais je suis envoyé dans la partie « ecrire » alors que j’aimerai être redirigé vers mon intranet (ex : www.monsite.fr/rubrique50 )

    j’ai modifié le fichier cicas_pipeline.php, en remplacant self() par $GLOBALS[’meta’][’www.monsite.fr/rubrique50’] mais ca ne fonctionne pas.

    Pouvez vous m’aider pour la redirection ?

    • Bonjour,
      Pour que phpCAS puisse rediriger sur une page particulière, il faut que le lien permettant de s’authentifier (sans entrer dans l’espace privé) précise l’URL de la redirection dans la variable ’url’.

      <a href="[(#URL_PAGE{login}|parametre_url{url,#URL_SITE_SPIP})]"> Authentification</a>
    • merci mais j utilise le plugin accès restreint et donc pas de lien pour préciser la redirection. Enfin je ne vois pas ou mettre cette redirection.

    • Comment arrive-t-on sur le formulaire d’authentification ?

    • 	    <li><a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a></li>
    • Pour arriver sur le formulaire d’authentification, il faut un lien qui contienne :

      #URL_PAGE{login}
    • merci équipement pour ton aide.

      j’ai réussi avec ce lien :

      <li><a href="[(#URL_PAGE{login}|parametre_url{url,http://www.monsite.fr/rubrique50.php})]"> Intranet </a><li>

      L’utilisateur clique sur le lien Intranet, puis si il s’authentifie avec le CAS, cela fonctionne par contre si il repasse dans le site public puis ensuite reclique sur le lien ’intranet’, il arrive sur une page vide de spip.

      Alors que si je m’authentifie avec les comptes locaux de spip, je peux passer du lien Intranet au site public sans soucis.

      c’est un problème important car mes visiteurs font bcp d aller retour entre le site public et la partie intranet et j’ai du mal a identifié si le problème vient de mon lien, du plugin cicas, du plugin acces restreint...
      il me reste ce dernier soucis avant de passer en prod si quelqu’un a une idée

    • Cela relève de l’élaboration des squelettes. Exemple de piste :

      [(#SESSION{id_auteur}|?{' '}|oui) 
      <li><a href="#URL_RUBRIQUE">[(#TITRE|supprimer_numero)]</a></li>
      ]
      [(#SESSION{id_auteur}|?{'',' '}|oui)
      <li><a href="[(#URL_PAGE{login}|parametre_url{url,rubrique50.php})]"> Intranet </a><li>
      ]
    • Ca fonctionne dans tous les cas :) , merci pour le temps que tu as consacré.

    Répondre à ce message

  • 1

    bonjour, je voulais savoir en cas de plantage du serveur CAS si on peux repasser facilement en mode authentification SPIP ? j ai testé un plugin LDAP et suite a une maj de SPIP, il n’étais plus compatible et je ne pouvais plus me connecter.

    • Bonjour, en cas de plantage du serveur CAS, il suffit de créer un fichier de paramétrage en indiquant le mode d’authentification « hybride », comme cela est détaillé dans la documentation en page 6.

    Répondre à ce message

  • 7

    Il me semble que ma question a été plus ou moins posée cepandnat je ne comprends pas bien la reponse. Mon authenfication fonctionne cependant la redirection se fait dans l’espace privé ?? or j’ai :
    <form id=« formulaire_login » method=« post » action=« /intranet/spip.php ?rubrique27 » , l’url semble correcte ?
    Pouvez m’aiguiller d’avance merci

    • Equipement

      Quelle est la version de CICAS qui est utilisée ?
      Quelle est l’adresse dans le navigateur, lorsque le formulaire d’authentification CAS apparaît ?

    • Desole
      l’url lors de l’authentification est : (http://xxxx/intranet/spip.php?rubrique27) et je suis renvoye par cicas sur (http://xxxx/intranet/ecrire/?bonjour=oui)mais dans la partie privee pourquoi ? ; ma question est la suivante je souhaiterais une redirection vers la page d’accueil publique (http://xxxx/intranet/ par exemple). comment procede t on ?
      Merci bien

    • Equipement

      Bonjour,
      Pour que phpCAS puisse rediriger sur la page d’accueil 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 d’accueil dans la variable ’url’.

      Exemple de lien :

      <a href="[(#URL_PAGE{login}|parametre_url{url,#URL_SITE_SPIP})]"> Authentification</a>
    • Merci cependant ca n’explique cependant pas pourquoi je suis redirigé vers la partie « ecrire » de spip. D’autre part pour mieux comprendre toutes mes rubriques sont d’accès restreint, la page d’accueil du user est son authentification. Suite à quoi je voudrai qu’il tombe sur la page « accueil » de spip et visualiser mes rubriques « à noter », « actualité » ... qui sont elles à accès restreint.
      Merci encore pour votre aide.

    • Dans ce cas spécifique, où la page d’accueil du user est son authentification, pour
      rediriger sur la page d’accueil du site public, il faut que l’URL d’accueil du user contienne le paramètre &url=... (en indiquant l’adresse relative de la page d’accueil du site public).

      Exemple d’URL d’accueil du user : nn.nn.nn.nn/intranet/spip.php ?rubrique27&url=.%2F

      A noter que si ce paramètre url est absent, on redirige par défaut dans l’espace privé (ce qui explique ce qui a été constaté).

    • Bingo :)
      Merci beaucoup pour vos reponses rapides et precises

    Répondre à ce message

  • 1

    Bonjour, j’essaie d’installer et de configurer cicas et je n’arrive pas. Je viens de comprendre qu’il me faut installer un serveur CAS. Peut-on me donner un lien vers une doc ? Est-ce que le plugin fonctionne avec lemonldap ?
    Merci

    Répondre à ce message

  • 1

    Bonjour,
    Le passage de 2.0.9 en 2.1.0 (et 2.1.x) a t-il des répercussions sur le fonctionnement du plug ?
    Avec une 110628, une migration 2.0.9 > 2.1.0 entraîne des comportements bizarres de mon côté (fonctionnement partiel) - désolé pour le vague de ma question ..

    • Equipement

      Bonjour,
      J’utilise la dernière version du plugin CAS sur SPIP 2.1.11 sans problèmes.

    Répondre à ce message

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

    Répondre à ce message

  • La version 1.2 du plugin corrige un bug. La version 1.3 du plugin apporte l’utilisation de la version 1.2 du client phpCAS.

    Répondre à ce message

  • 8

    Bonjour,
    J’obtiens cette erreur dans la connexion CAS :

    phpCAS error : phpcas::forceauthentication() : one of the methods phpCAS::setCasServerCert(), phpCAS::setCasServerCACert() or phpCAS::setNoCasServerValidation() must be called. in /www/users/cormier/public_html/site/plugins/auto/cicas/inc/cicas_login.php on line 62

    Pouvez-vous m’aider ?
    Bien cordialement

    • Equipement

      Bonjour,

      Le message indique que l’une des 3 méthodes (setCasServerCert ou setCasServerCACert ou setNoCasServerValidation) doit être appelée avant « forceauthentication ».

      Le plugin CICAS tente d’appeler la 3e méthode (si elle existe) avant « forceauthentication ».
      Extrait du fichier cicas/inc/cicas_login.php :

      if (method_exists('phpCAS','setNoCasServerValidation')) {
      	phpCAS::setNoCasServerValidation();
      }
      
      // forcer l'authentication CAS
      phpCAS::forceAuthentication();

      Est-ce le serveur CAS utilise un certificat ?

      Cordialement

    • Equipement

      Une piste peut consister à remplacer, dans le fichier cicas/inc/cicas_login.php, le code suivant :

      if (method_exists('phpCAS','setNoCasServerValidation')) {
      	phpCAS::setNoCasServerValidation();
      }
      
      // forcer l'authentication CAS
      phpCAS::forceAuthentication();

      par :

      phpCAS::setNoCasServerValidation();
      
      // forcer l'authentication CAS
      phpCAS::forceAuthentication();

      Merci de m’indiquer si cela règle le problème.

    • Bonjour,
      Merci pour cette réponse rapide.
      Je me renseigne.
      Bien cordialement

    • Re,
      Je fais la transformation et vous donne le résultat.
      Cordialemetn

    • Cela semble fonctionner. A la déconnexion de SPIP l’erreur suivante est affichée :
      phpCAS error : phpcas::logout() : method phpCAS::logout($url)' is now deprecated, usephpCAS::logoutWithUrl($url)’ instead in /www/users/cormier/public_html/site/plugins/auto/cicas/action/logout.php on line 94

    • Equipement

      C’est curieux car le plugin CICAS tient compte de ce genre de situation.

      Une piste peut consister à remplacer, dans le fichier cicas/action/logout.php, le code suivant :

      if (method_exists('phpCAS','logoutWithUrl')) {
      	// Compatibilité avec les versions récentes de phpCAS
      	phpCAS::logoutWithUrl(urlencode($ci_url_retour));
      } else {
      	phpCAS::logout(urlencode($ci_url_retour));
      }

      par :

      phpCAS::logoutWithUrl(urlencode($ci_url_retour));

      Merci de m’indiquer si cela règle le problème.

    • Re,
      En tout cas, conjugué avec l’accès restreint, cela fonctionne très bien. Merci. Je fais la modification et vous dit quoi.
      Cordialement

    • Cela semble fonctionner. La déconnexion renvoie à une page du serveur CAS qui indique que l’utilisateur est déconnecté.
      Bien cordialement et merci pour cette réactivité instantanée.

    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