Outils pour utilisateurs

Outils du site


fr:rapports:2025:06-28

2025/06/28 (Neutriton : SSO le reour)

Heure de début : trop tôt :+1:

Présences : HgO, Célo, Tharyrok

Météo

Moment informel durant lequel on exprime en peu de mots comment on se sent et si on a une attente forte pour la réunion. Ce n'est pas un moment de discussion mais d'expression individuelle et ce n'est pas obligatoire :-)

Attente(s) forte(s)

Si l'une ou l'autre personne exprime une attente forte, merci de vous en occuper en priorité ou de la noter dans le hub ou dans un point approprié.

FIN: 17h30

Contexte

La Contre Voie a écrit un comparatif récent sur les différents outils SSO existants:

https://lacontrevoie.fr/blog/2024/comparatif-de-onze-solutions-de-sso-libres/

Pour mémoire, on avait fait un Neutriton en 2021: https://wiki.neutrinet.be/fr/rapports/2021/02-20

Donc ça date un peu.

Il y avait pas énormément de solutions : LemonLDAP, Keycloak, et euh c'est tout en libre.

Maintenant, plus de solutions sont devenues matures. Du coup, c'est pertinent de réévaluer la question.

A l'époque, le choix s'était aussi tourné vers keycloak parce que c'était un outil connu en interne. Il y avait déjà eu des changements dans la config mais moins de changements et de polémiques avec Red hat que par la suite.

Il y a 3 manières de faire la config des clients OpenID, des clés publiques/privées, création d'utilisateurs, etc. : - Avec des fichiers de config - Avec des API - A la main

C'est pénible Keycloak parce qu'il faut faire à la main. Ou utiliser l'outils cli : https://www.keycloak.org/securing-apps/client-registration-cli

Même si en principe on ne refait pas ce genre de config tous les quatre matins.

Mais bon, ce serait chouette quand même de pouvoir intégrer la config du SSO dans le playbook Ansible, comme ça on peut boire notre café / ice tea en paix :cocktail:

Comme pour la Contrevoie, on peut se demander : Qu'est-ce qu'on veut comme fonctionnalités au final ?

  • Sur la queston des ACLs (geston des droits d'accès) → à discuter.
    • Beaucoup d'ACL sont gérées côté applicatif (par ex Nextcloud crée le groupe, et les admins créent les permissions)
    • En fait, il y a des plugins qui existent pour faire ça, par ex un plugin caddy-security, mais aussi proxy-oauth, etc.
    • Donc ce n'est pas un critère pour nous
  • Portail d'applications
    • Ce serait intéressant de l'avoir, parce que pour le moment c'est compliqué pour une personne externe de savoir ce que Neutrinet propose
    • Pour le projet ChezMeme, ça fait pleinement sens aussi.
    • Si le SSO ne l'a pas, il faudra qu'on le fasse nous, donc du travail en plus pour nous (et on n'aime pas ça)

Nos critères majeurs: - Libre - OpenID - Logiciel maintenu - Flow d'inscription - Flow de connexion - Deux facteurs ~~postaux~~ TOTP - Configurable avec ansible

Nos critères secondaires / majeurs non bloquants: - Traduit en français (c'est aussi un portail pour les membres) - Portail d'applications

Nos critères en bonus: - Traduit en néerlandais, allemand, wallon, brusseleir, flamand, etc. - Solution antispam libre (par ex: captcha, mais pas que) - RBAC (Gestion ACL, en général géré dans l'application) - Champs personnalisables (si ce n'est pas géré par le SSO, ça le sera dans l'application)

Comme il y a l'idée de faire un CHATONS « chez mémé », est-ce qu'il faudra migrer des services de Neutrinet chez Mémé ? Est-ce qu'il faudra deux SSO ?

Si on a un seul SSO pour les deux entités, cela peut-être intéressant d'avoir les ACL. A priori, pour deux entités, le plus simple, c'est deux SSO séparés.

Tour des outils

Le chiffre indique le nombre d'humains/robots autour de la table qui ont déjà utilisé (même très vaguement) l'outil

Keycloak - 3

Nous le connaissons un peu et on n'avait fait un neutriton dessus. Pas grand chose à rajouter par rapport à ce qu'en dit la Contrevoie.

https://www.keycloak.org/

Après, on n'en est pas satisfaits, c'est un peu la raison pour laquelle on cherche autre chose.

Les principaux défauts sont:

  • la configuration manuelle de Keycloak
  • la manière dont RedHat développe le logiciel
  • personnalisation visuelle de l'interface

Authelia - 1

C'est écrit en Go. Il faut un annuaire LDAP. De notre côté, on peut aussi utiliser LLDAP, qui est un tout petit annuaire, prévu pour le cas d'usage que nous avons.

https://github.com/lldap/lldap

  • Pas de formulaire d'inscription (un admin doit intervenir pour créer un compte)
  • Il y a un formulaire de connexion.
  • Il y a du TOTP
  • Il n'y a pas de portail
  • Il y a une gestion des permissions (RBAC)
  • Il n'y a pas de champs personnalisables.
  • Il y a une traduction en français (autres langues à vérifier)

À voir si configurable avec Ansible, mais la config étant du YAML ça semble faisable.

Authentik - 1

  • Il y a un formulaire d'inscription.
  • Facilement customisable
  • Il n'y a pas de captcha libre, seulement des captcha propriétaires
  • Il y a un formulaire de connexion.
  • Il y a du TOTP
  • Il y a une gestion des pesmissions (RBAC)
  • Il y a des champs personnalisables.
  • Il y a un portail
  • Il y a une traduction en français (autres langues à vérifier)

À voir si configurable avec Ansible

Ory

Ca fait plus que du SSO, c'est toute la gestion d'identité. Ca a l'air complexe et un peu infernal quand on lit les retours de la Contrevoie. En outre :

  • Il n'y a pas de captcha
  • Pas de traduction
  • Pas customisable
  • Il y a un espace membre et un portail
  • IL y a du TOTP
  • il y a un formulaire de connexion
  • il y a un formulaire d'inscription
  • À voir si gestion des permissions (RBAC)

Très compliqué à déployer

Casdoor

  • Il y a une formulaire d'inscription, de connexion
  • Il y a du TOTP
  • Il y a des captcha, mais faciles à cassés
  • Pour les ACL, c'est complexe
  • Il y a un espace membre (portal)
  • C'est relativement simple à déployer (mauvaise documentation)
  • Sort une version tous les jours, un peu l'enfer
  • Mais sécurité prise à la légère (notamment l'envoi des captcha en clair et la conservation des mots de passes)

Zitadel

  • Il y a un formulaire d'inscription et de connexion
  • Il y a du TOTP
  • C'est traduit en Français
  • Pour les ACL et le portail, on ne sait pas
  • C'est simple à déployer mais difficile à personnaliser.

Entre temps la v3 est sortie, mais il n'y a toujours pas moyen de personnaliser les champs du formulaire.

Canaille - 1

  • Il y a un formulaire d'inscription
  • Il n'y a pas de support de saml et openid
  • Il supporte uniquement openid connect
  • C'est en français
  • Il y a de la customisation
  • Il y a un portail
  • a priori, il n'y a pas de captcha

À voir pour le déploiement avec Ansible Le gros problème c'est que c'est orienté pour un usage de CHATONS, et plus particulièrement de leur CHATONS. Par exemple, quand on se connecte, on a un portail d'application. Mais Canaille crée un email identifiant unique pour se connecter dans l'application. Les emails réels ne sont jamais utilisés. Donc l'idée c'est d'avoir plusieurs logins vers les applications. Depuis le SSO, on choisit alors son profile pour se connecter (exemple, des gens qui sont dans plusieurs assoc'. Donc a priori, c'est moins pertinent dans notre usage.

LemonLDAP - 2

  • Il y a un formulaire de connexion
  • Il y a un formulaire d'inscription
  • Il y a un portail
  • Il y a le TOTP
  • C'est en français
  • Il y a les ACL
  • Compliqué à personnaliser

Enfer à déployer / configurer avec Ansible (clicodrome)

SSOwat

C'est très lié à YunoHost. Ce n'est pas vraiment un SSO en tant que tel même si c'est dans le nom.

Rauthy

  • Il y a un formulaire d'inscription
  • Il y a du multifacteur
  • Il y a un portail pour la gestion de compte, mais pas sûr qu'on puisse voir les applications
  • Il y a une portection contre la bruteforce
  • Très configurable
  • Traduit en Anglais et Allemand et possiblité de rajouter d'autres langues

Il faudrait le tester pour bien voir ce que ça propose.

Choix de l'outil

Keycloak coche une grande part de nos besoins. Mais pas la possibilité de le déployer avec Ansible, ce qui est un critère important pour nous pour ne pas se taper la tête contre les murs - on préfère préserver un peu nos têtes.

Authelia, ça nous laisse un peu sur notre fond. Il y a des choses qu'on laisse de côté et il n'y a pas de formulaire d'inscription. Donc on passe à autre chose.

Authentik, il n'y a pas de captcha, mais ce n'est pas vraiment dans nos critères forts. A priori, il coche toutes les autres cases. PS: P.s. l'utilise.

Ory est trop compliqué à déployer de toute façon (autant faire de Keycloak alors).

Cassdor, ça pourrait être bien, mais la partie sécurité fait un peu peur… Mais il faudrait se faire notre propre avis car cela a pu changer depuis le comparatif de la Contrevoie. Ceci dit, il y a une version tous les jours et pas de gestion de version… donc ça nous semble fort instable. A priori, on préfère quelque chose de stable.

Zitadel, il faudrait le tester pour affiner.

Canaille n'est a priori pas vraiment pertinent pour notre usage.

LemonLDAP, un critère pourrait être de l'utiliser malgré ses défauts de manière à renforcer une connaissance dessus et pouvoir se soutenir mutuellement avec Nubo. Mais Nubo pourrait à un moment changer son SSO, et alors ce choix ne serait plus très pertinent. Et c'est assez complexe à prendre en main, on risque de s'épuiser là-dessus. À l'inverse, avoir une pratique d'un autre outil pourrait permettre à Nubo de changer d'outil s'il le souhaite.

Rauthy, il faudrait le tester.

Donc, on doit tester:

1) Authentik → Tharyrok

2) Casdoor → HgO

  1. Note: Impossible de build le frontend, j'ai dû faire un yarn start
    1. FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
    2. [2474:0x294aec80] 106227 ms: Scavenge (reduce) 2035.3 (2080.5) → 2034.7 (2080.8) MB, 15.05 / 0.00 ms (average mu = 0.147, current mu = 0.001) allocation failure;
    3. [2474:0x294aec80] 107491 ms: Mark-Compact (reduce) 2035.5 (2080.8) → 2034.9 (2081.3) MB, 1263.28 / 0.00 ms (average mu = 0.115, current mu = 0.082) allocation failure; scavenge might not succeed
    4. –max-old-space-size=4096

3) Zitadel → Célo 4) Rauthy → THarYrok

Comment on fait ? (aka la suite)

Qu'est-ce qu'on veut tester pour valider ou invalider un des quatre choix ?

  • Config via ansible
    • On fait un role pour check si c'est ficher de config ou api ou cli ou interface graphique
  • Personalisation cosmétique
    • On check si on peut le mettre à nos couleurs
  • Prise en main collective
    • Est-ce facile de voir les logs
    • Est-ce facile de comprendre le flow connexion / inscription
    • Est-ce facile de modifier un profil d'un membre
  • Avons-nous un portail configurable pour lister les applications/ editer les profils ?
  • TOTP :
    • Est-ce que le TOTP est facile à mettre en place?
    • Est-ce que on peut forcer le TOTP pour des groupes ou des applications
    • Idée : que nos comptes au quotidien soient des comptes normaux mais qu'on ait des comptes admin pour l'admin des services avec TOTP.

Résumé

Casdoor

Installation: un peu complexe car peu documenté (bug lors de la compilation), mais sinon c'est un binaire, avec un fichier de config assez basique. A priori, tout se fait via l'interface web. Par contre, on peut importer des données (liste des utilisateurs par ex)

Il y a une API: https://casdoor.org/docs/basic/public-api

Créé une nouvelle organisation Neutrinet, on peut définir les paramètres liés à cette orga, ainsi que les champs qui seront utilisés.

Par contre, tout n'est pas super clair, les mots de passe sont en clair par défaut, etc. Le workflow n'est pas évident, on peut assigner une app à une organisation, un compte à une organisation, et le bouger d'une orga à une autre, mais pourtant à ce stade pas possible de se connecter via la nouvelle organisation…

Quand il y a une erreur, l'utilisateur n'a pas d'infos, juste un gros écran rouge et noir. Il n'y a pas non plus d'infos côté backend…

Zitadel

  • Facile à installer is on connaît postgresl.
  • On ne peut pas rendre un utilisateur actif sans vérifier via un lien envoyé par mail, du coup pas possible sur une install de test sans configurer un smtp. (du coup le mot dabs le gopass peut être utilisé aussi pour l'utilisateur par défaut)
  • Après l'installation, on ne peut s'y connecter que depuis localhost, par exemple avec ssh xxx@2001:913:1d00:102::1002 -L 8080:localhost:8080

La commande qui lance le schmilblick.

ZITADEL_DATABASE_POSTGRES_HOST=localhost ZITADEL_DATABASE_POSTGRES_PORT=5432 ZITADEL_DATABASE_POSTGRES_DATABASE=zitadel ZITADEL_DATABASE_POSTGRES_USER_USERNAME=zitadel ZITADEL_DATABASE_POSTGRES_USER_PASSWORD=zitadel ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE=disable ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME=zitadel ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD=zitadel ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE=disable ZITADEL_EXTERNALSECURE=false zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled

Pour qu'il écoute sur le domaine, nous avons tenté :

export ZITADEL_DATABASE_POSTGRES_HOST=localhost
export ZITADEL_DATABASE_POSTGRES_PORT=5432
export ZITADEL_DATABASE_POSTGRES_DATABASE=zitadel
export ZITADEL_DATABASE_POSTGRES_USER_USERNAME=zitadel
export ZITADEL_DATABASE_POSTGRES_USER_PASSWORD=zitadel
export ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE=disable
export ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME=zitadel
export ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD=zitadel
export ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE=disable
export ZITADEL_EXTERNALDOMAIN=zitadel.zitadel.mnl.neutri.net
export ZITADEL_EXTERNALSECURE=false
zitadel setup --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled
zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled

Conclusion

On n'a pas terminé l'installation de Zitadel, quelques petits détails à régler. Il y a moyen de customiser l'interface. Il faut utiliser le tunnel ssh pour s'y connecter car le match entre le domaine configuré et celui utiliser ne correspond pas.

Pour Casdoor, l'installation est terminée. Par contre, pas encore réussi à se connecter dans l'organisation créée. A priori, on peut un peu custom les formulaire, mettre des logo sur les applications et sur l'organisation. Par contre la prise en main n'est pas intuitive car les tooltips ne sont pas claire, et les libéllés sont -_- encore moins claire. Par contre, il y a un guide de démarrage qui peut être intéressant, mais je l'ai lu en diagonale pour le moment.

Pour Authentik, l'interface de login est super customisable. Si on se connecte, on voit la liste des apps, et on peut même les grouper. On peut mettre une description sur l'application. Il y a les blueprint (fichiers YAML) qui peuvent permettre l'automatisation.

Pour Rauthy, bon déjà le logout ne marche pas. La page d'accueil est super minimaliste, on ne peut pas beaucoup customiser (changer les couleurs). La page de profil est fonctionnelle, mais reste minimaliste. L'admin est adminimaliste. Si on a besoin d'un truc extrêmement légére, ça peut faire l'affaire. Tharyrok n'est pas satisfait.

Du coup, on va faire un focus sur authentik, et si ça ne va pas on reviendra vers Casdoor et Zitadel.

Prochaine réunion

TODO:

  • Installer une instance de dev de Authentik dans le cluster patata
  • S'amuser avec l'instance (enfin bon ça reste du SSO), avec une application bidon

Prochaine réunion : 13/09 à 10h30

Lieu : Chez Célo

Garde-Pad : Célo (+ rattrappage)

Météo de fin

Moment informel durant lequel on exprime en peu de mots comment, à titre personnel, la réunion a été vécue que ce soit positif ou négatif. Si une ou plusieurs tension est née durant la réunion, il est peut-être nécessaire d'envisager l'une ou l'autre réunion pour y remédier.

fr/rapports/2025/06-28.txt · Dernière modification : de tharyrok