« Authentification OpenID par Authelia » : différence entre les versions

De WikiBR
m (Thomas.sauvage a déplacé la page OpenID vers Authentification OpenID par Authelia : Cohérence avec la page CAS et meilleure recherche)
(Ajout d'un example)
Ligne 12 : Ligne 12 :
* Prénom NOM ;
* Prénom NOM ;
* groupes Sigma (seulement les groupes dont on est membre).
* groupes Sigma (seulement les groupes dont on est membre).
==Example d'implémentation==
===Pour Node.js et Adonis JS===
Le protocole OpenID est très commun, et de nombreux packets existent qui nous simplifieront la vie. Pour tous les backend basés sur Node.js (Adonis JS, nest.js, Express...), il est possible d'utiliser le packet [https://www.npmjs.com/package/openid-client openid-client].
Voici un example pour Adonis JS, qui s'adapte à tout backend basé sur Node.js, sur [https://gitlab.binets.fr/svg/example-backend/-/blob/main/app/Controllers/auth/authSigmaUser.ts Gitlab].
Cette implémentation nécessite:
* Qu'une route (comme `/auth/sigmaUser/login/`) pointe vers la fonction`loginSigmaUser`
* Que la route `/auth/sigmaUser/callback/` pointe vers la fonction `callbackSigmaUser`
* Une base de données avec trois colonnes: state, codeVerifier et date de création
* Un cron (fonction qui s'éxécute régulièrement, par exemple une fois par jours) qui supprime les lignes de la base de donnée susnommée qui sont trop vieux (par exemple vieux de plus d'une heure). Voir l'[https://gitlab.binets.fr/svg/example-backend/-/blob/main/app/Controllers/cron.ts implémentation du cron] (qui est ici exécuté lorsqu'un autre programme fait une requête à une certaine route)
Le cron est nécessaire, car si un utilisateur commence à se connecter, une nouvelle ligne est crée dans la base de données. Elle est ensuite supprimée lorsqu'il a tapé ses identifiants. Si l'utilisateur ne tape jamais ses identiiants, la ligne n'est jamais supprimée, d'où la nécessité du cron.

Version du 23 novembre 2023 à 12:26

Sigma permet à des sites externes (binets en particulier) d'utiliser sa base de données pour authentifier les utilisateurs à travers le protocole OpenID.

Le serveur d'authentification est situé à l'adresse auth.binets.fr et est un instance authelia.

Le webmaster du site en question doit auparavant faire une demande de mise en place de ce système en créant une tâche PaniX. Il doit alors donner l'url complète de la page de login de son site (plus précisément, l'URL de callback) et une justification de la demande. Si la demande est acceptée, un membre du BR va alors inscrire son site dans notre base de données de sites externes.

Informations disponibles

Les informations disponibles sur authelia pour un utilisateur sont :

  • email ;
  • uid ;
  • Prénom NOM ;
  • groupes Sigma (seulement les groupes dont on est membre).

Example d'implémentation

Pour Node.js et Adonis JS

Le protocole OpenID est très commun, et de nombreux packets existent qui nous simplifieront la vie. Pour tous les backend basés sur Node.js (Adonis JS, nest.js, Express...), il est possible d'utiliser le packet openid-client.

Voici un example pour Adonis JS, qui s'adapte à tout backend basé sur Node.js, sur Gitlab.

Cette implémentation nécessite:

  • Qu'une route (comme `/auth/sigmaUser/login/`) pointe vers la fonction`loginSigmaUser`
  • Que la route `/auth/sigmaUser/callback/` pointe vers la fonction `callbackSigmaUser`
  • Une base de données avec trois colonnes: state, codeVerifier et date de création
  • Un cron (fonction qui s'éxécute régulièrement, par exemple une fois par jours) qui supprime les lignes de la base de donnée susnommée qui sont trop vieux (par exemple vieux de plus d'une heure). Voir l'implémentation du cron (qui est ici exécuté lorsqu'un autre programme fait une requête à une certaine route)

Le cron est nécessaire, car si un utilisateur commence à se connecter, une nouvelle ligne est crée dans la base de données. Elle est ensuite supprimée lorsqu'il a tapé ses identifiants. Si l'utilisateur ne tape jamais ses identiiants, la ligne n'est jamais supprimée, d'où la nécessité du cron.