Table des matières

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 ?

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:

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

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

Authentik - 1

À 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 :

Très compliqué à déployer

Casdoor

Zitadel

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

Canaille - 1

À 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

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 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 ?

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

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:

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.