Accueil > OpenID Connect OAuth Serveur dédié > Développer > Plugin OpenID Connect Client pour SPIP

Plugin OpenID Connect Client pour SPIP

Un client OIDC pour SPIP. Permet à une application SPIP de proposer l’authentification avec OpenID Connect, à côté de l’authentification classique.

Les développeurs d’application SPIP pourront renforcer la protection de l’accès aux fonctionnalités réservées et à l’espace privé en limitant l’accès aux seules personnes enregistrées sur le serveur OIDC configuré [1].

Prérequis

- v 1.0.3 : SPIP 3.0, 3.1 ; v 1.0.4 : SPIP 3.2,
- système Linux + PHP 5.6 ou 7.1,
- ionCube PHP Loader installé sur le serveur de l’application SPIP (IonCube est installé par défaut sur la plupart des configurations Linux).
- Attention ! le fonctionnement d’OIDC exige une application cliente installée sur un serveur sécurisé (protocole https://).

Inscription de l’application sur le serveur OAuthSD

L’application recevant le plugin doit être enregistrée en tant que client du serveur OAuthSD.
La procédure est décrite ici : OpenID Connect : Lier une application cliente au serveur OAuthSD.

En suivant cette procédure :
- vous vous inscrirez en tant qu’auteur sur le serveur OAuthSD,

- vous enregistrerez votre application. L’enregistrement se fait ici : Inscrire une application cliente.
Vous devrez :

  • configurer l’adresse de retour (Redirect URI) sous la forme suivante : https://mon_application.com/?action=auth
  • Inscrire au moins le scope "openid".

- l’installation et la configuration du plugin répond à l’étape 3 :

Installation et configuration du plugin

 Le plugin se trouve sur GitHub :
- https://github.com/bdegoy/oidcclient

Le plugin s’installe selon la procédure d’installation manuelle de tout plugin SPIP :

  • transférer le répertoire oidcclient dans le répertoire plugins,
  • activer le plugin dans l’administration.

- ouvrir le formulaire de configuration et indiquer l’ID de l’application cliente et son secret fournis lors de l’enregistrement de l’application sur le serveur OAuthSD :

Inscription en tant qu’utilisateur OpenID Connect

Pour enregistrer votre application, vous vous êtes inscrit sur ce serveur en tant qu’auteur. Pour utiliser le SSO OpenID Connect [2], vous devez vous inscrire en tant qu’utilisateur sur un serveur d’authentification compatible. Les deux inscriptions sont distinctes.

Si vous n’êtes pas déjà inscrit sur OAuthSD, vous devez vous s’inscrire sur ce serveur en tant qu’utilisateur.

Il faut ensuite établir une correspondance entre OpenID Connect et SPIP.

Correspondance entre l’utilisateur OpenID Connect et l’auteur (l’utilisateur) SPIP

Si vous tentez la connexion OpenID Connect avec un utilisateur inconnu de l’application, vous obtiendrez un message d’erreur comme celui-ci :

Il faut que l’utilisateur OpenID Connect soit lié à un compte d’auteur de l’application SPIP pour que celle-ci accepte la connexion. Ceci est réalisé en inscrivant le login OIDC dans le champ oidc de la fiche de l’auteur.

Bien entendu, pour faire cette modification, vous devrez fournir le mot de passe du compte d’auteur [3] :

Notes :
- On pourrait imaginer de créer un compte SPIP avec le même login, mais cela n’est pas nécessaire.
- On pourrait également penser à une autre solution : créer un nouvel utilisateur OpenID Connect avec le login SPIP ; Mais cela irait à l’encontre du principe de connexion unique (SSO) : si un utilisateur a une inscription sur OAuthSD, c’est pour pouvoir se connecter à différents systèmes avec les mêmes identifiants. La bonne solution est donc de lier un auteur SPIP à un compte OIDC pré-existant, non l’inverse.
- Dans certaines applications, il peut être opportun de créer automatiquement l’utilisateur manquant. Il existe en développement une version du plugin réalisant cela. Cette façon de procéder est sûre si l’inscription préalable de l’utilisateur sur le serveur OIDC est suffisamment contrôlée au regard des exigences de sécurité de l’organisation.

Une fois liés les utilisateurs OpenID Connect et SPIP, le formulaire de connexion fait apparaître le lien et propose la connexion avec OIDC :

Dans cette situation, il reste possible de se connecter "normalement" en actionnant le lien "Ne pas utiliser OIDC, utiliser un mot de passe".

Notes :
- Un seul utilisateur OpenID Connect peut-être lié à un compte d’auteur de l’application SPIP. De même, un seul compte d’auteur de l’application SPIP peut être lié à un même utilisateur OpenID Connect.
- Seul les logins servent à établir la correspondance, les mots de passe sont propres à chaque système.

Connexion à l’application SPIP

Le plugin modifie le cadre de connexion de SPIP en ajoutant la possibilité d’utiliser OpenID Connect. La méthode classique reste disponible :

Entrez votre email ou votre signature (pseudo) puis :

Pour vous identifier avec OpenID Connect, assurez-vous que le champ "Mot de passe" est vide et actionnez le bouton "Valider".

Pour vous connecter avec la méthode standard, entrez le mot de passe d’auteur (ou utilisateur) SPIP avant d’appuyer sur le bouton "Valider".

Notes :
- Le plugin ajoute ’oidcclient’ à la liste des méthodes disponibles (variable $GLOBALS[’liste_des_authentifications’]). SPIP tente les différentes méthodes d’authentifications enregistrées en commençant par la méthode standard. En cas d’échec, SPIP passe à la méthode suivante.
- Si vous vous connectez avec la méthode standard, et que votre login ou mot de passe est faux, vous serez redirigé vers la connexion avec OpenID Connect. Dans cette situation, la fonctionnalité SLI pourrait aboutir à une connexion automatique.
- Si votre navigateur vous propose de mémoriser les identifiants de connexion, il est inutile de le faire : le mot de passe vu par le navigateur est crypté et change à chaque fois.

Monitoring

Le monitoring de l’état de l’authentification a pour but de synchroniser la connexion locale d’une application avec le jeton d’accès correspondant. Il permet notamment de visualiser l’état de connexion de l’utilisateur :

icône Signification
La connexion de l’utilisateur final n’est pas établie avec le serveur OIDC. Notez que l’utilisateur peut s’être connecté à l’application à l’aide de la méthode de connexion classique de SPIP.
L’utilisateur final et l’application sont connectés par OIDC.
Erreur générale, traduit malheureusement de multiples situations :
- perte de communication Internet,
- défaut de configuration du plugin,
- défaut d’inscription de l’application cliente sur le serveur OAuthSD,
- inscription de l’application sur un autre serveur, non compatible OAuthSD,
- login inconnu du serveur OAuthSD (l’utilisateur final n’est pas inscrit sur ce serveur),
- etc.
Le message peut éventuellement être plus explicite : "authentication error", ...
Notons que l’icône erreur peut apparaître brièvement au changement de page.

Le Monitoring permet également de manager la session OIDC et notamment d’effectuer la déconnexion globale (SLO).
En cliquant sur l’icône, des popups apparaissent selon l’état de connexion :

Une fonctionnalité du monitoring consiste à alerter l’utilisateur de la fin imminente de la session OIDC et lui permettre de la prolonger :

Notons que le monitoring a besoin pour fonctionner d’être appelé à partir d’un bloc div dans toutes les pages de votre application, par exemple dans le pied de page :

SPIP

[(#REM) Monitoring OAuthSD]
<div id="oidc_connexion">
   <INCLURE{fond=inclure/oidc_monitor, env} />
</div>

Pour plus d’information sur le monitoring voyez :
- Monitoring de l’état de l’authentification et SLO
- Avertir de la fin de session OIDC et la prolonger

Informations sur le serveur et la connexion OIDC

Un clic sur le point d’interrogation fait apparaître une fenêtre popup donnant les informations sur la connexion au serveur OIDC :

- Serveur : l’URL du serveur OIDC, cliquez pour atteindre le site support du serveur.
- Client ID : l’ID de l’application courante sur le serveur.
- Login SPIP : l’identifiant de connexion de l’utilisateur à l’application SPIP. Nul si l’utilisateur n’est pas connecté.
- Login OIDC : l’identifiant d’enregistrement de l’utilisateur sur le serveur OIDC (peut-être différent du précédent). Nul si l’utilisateur n’est pas connecté.
- T. session restant : la durée de vie restante de la session OIDC.
- Délai de réponse : durée de cycle de la dernière interrogation du contrôleur Authorize. Un temps anormalement long (supérieur à la seconde) peut traduire une connexion de données lente, une erreur de communication ou une surcharge du serveur OIDC. Si vous pensez que votre connexion de données est bonne, et si une durée anormalement longue persiste, contactez l’administrateur du serveur.

Commentaires et avertissements :

- Ce plugin n’est pas un remplacement ou un équivalent du plugin OpenID.

- Il reprend cependant le principe du plugin OpenID qui consiste à donner le choix entre la connexion avec OpenID Connect ou la méthode login/mot de passe classique. Merci aux auteurs d’OpenID à qui a été emprûntée la structure générale du plugin.

- OpenID Connect (OIDC) ne doit pas être confondu avec OpenID. La connexion automatique avec un identifiant OpenID universel n’existe pas dans le standard OIDC. OIDC offre une sécurité supérieure en permettant de construire un système propriétaire dans lequel les applications clientes et les serveurs, ainsi que les utilisateurs, sont limités à un ensemble bien identifié.

- Un utilisateur qui souhaite utiliser OIDC pour s’identifier doit être enregistré sur un serveur OIDC que lui a désigné le concepteur de l’application et dont l’URL est configurée dans l’administration de ce plugin.

- Un concepteur d’application qui utilise ce plugin doit enregistrer l’application en tant que client sur un serveur OpenID Connect.

Si vous voulez le faire sur ce serveur OAuthSD, il faut vous inscrire comme auteur et administrateur d’applications puis enregistrer l’application.

- La version du plugin présentée ici date un peu. Depuis, une nouvelle version a été développée et abondamment testée avec les applications i-Tego SaaS. Il est notamment possible de pratiquer la connexion automatique.

- Ce site web implémente un démonstrateur d’OAuthSD ; le serveur peut être indisponible et les données enregistrées effacées à tout moment.

- Aucune garantie d’aucune sorte n’est attachée à l’utilisation de ce serveur, des plugins, du code et de la documentation fourni par i-Tego.

- Le plugin est distribué sous licence GPL3.

- une partie sensible du source du plugin n’est pas fournie pour des raisons de sécurité.

FAQ

Erreur :
Le login OIDC xxx n’est pas lié à un compte de cette application.

Cette erreur apparaît après que vous avez validé le formulaire d’identification (ou en cas de connexion automatique à une nouvelle application). Elle signifie que le login que vous avez indiqué dans ce formulaire (ou le login indiqué par le cookie en cas de reconnexion automatique) n’est pas un login d’auteur de l’application SPIP à laquelle vous avez tenté de vous connecter. Reportez-vous au paragraphe "Correspondance entre l’utilisateur OpenID Connect et l’auteur (l’utilisateur) SPIP " ci-dessus.

Un conseil : faites simple, créez le login SPIP ou modifiez-le de façon à ce qu’il soit identique au login OIDC.
Important : Ne créez pas un nouvel utilisateur OpenID Connect avec le login SPIP, cela est contraire au principe même de l’inscription unique (Single Sign On, SSO).

Question :
Quelle différence entre le lien "Se déconnecter" et "Clore la session OpenID Connect" ?

Cela dépend de la façon dont le lien "Se déconnecter" a été écrit par le développeur de l’application SPIP :
- si le lien contient le paramètre d’URL "logout=public", les deux méthodes sont équivalentes et conduiront à la déconnexion globale : toutes les applications actuellement connectées pour l’utilisateur authentifié seront déconnectées et la session OpenID Connect sera détruite ;
- si le lien contient le paramètre d’URL "logout=local", seule l’application courante sera déconnectée, la session OpenID Connect étant préservée.

Notes :
- Le plugin surcharge la fonction action_logout_dist(). Par défaut, toute utilisation de cette fonction, sans préciser le paramètre d’URL "logout=local" générera une demande de déconnexion vers OIDC.
- Il est peut-être préférable de na pas préciser "logout=local" afin de provoquer systématiquement la déconnexion globale, ce qui va dans le sens de la sécurité, particulièrement si une application est restée connectée sur un mobile ou une autre station de travail.

Question :
Et tout cela fonctionne avec un mobile ?
Oui, bien sûr, et pourquoi pas ?
En particulier, le mobile obéira bien à une déconnexion globale venant d’une autre application.

Question :
Est-ce que fermer le navigateur suffit à provoquer une déconnexion globale ?
Non.
Il faut explicitement clore la session OIDC.
D’ailleurs, si vous relancez le navigateur sur l’application que vous venez de quitter alors qu’elle était connectée, elle sera aussitôt reconnectée.
Il en est de même si on se contente de fermer l’onglet du navigateur dans lequel l’application était lancée et connectée.

Notes

[1Pour l’instant, ce plugin n’a été validé que sur le serveur OAuthSD (ce serveur).

[2Ne pas confondre avec OpenID

[3Y compris si l’opération est effectuée par l’administrateur, afin de protéger parfaitement les intérêts de l’utilisateur.