From f3e78c55e1c3eb1bf51d2883c658dfae5131a3ed Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Thu, 2 Jul 2026 13:27:04 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20architecture=20d'identit=C3=A9/SSO=20(O?= =?UTF-8?q?penLDAP=20source,=20Keycloak=20f=C3=A9d=C3=A9r=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modèle A arrêté : OpenLDAP = source de vérité des identités ; Keycloak = SSO web OIDC fédéré à LDAP (MFA, self-service) ; mail (Dovecot/Postfix) = bind LDAP direct. Une identité, un mot de passe, deux chemins d'auth, même OpenLDAP. Sert la portabilité multi-tenant. Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 5 ++++ docs/identite-sso.md | 60 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 docs/identite-sso.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 73fbe57..be30f66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,11 @@ ## 2026-07-02 ### Décidé +- **Architecture d'identité/SSO (`docs/identite-sso.md`).** Modèle A : **OpenLDAP source de + vérité**, **Keycloak fédéré** (SSO web OIDC, MFA, self-service), **mail en bind LDAP + direct**. Une identité, un mot de passe, deux chemins d'auth (web→Keycloak, mail→LDAP), + tout adossé au même OpenLDAP. Sert la portabilité multi-tenant (chaque tenant = son LDAP + + son Keycloak fédéré). Pas Keycloak-source (casse-tête mail + moins portable). - **Service courriel : pivot de Stalwart vers Postfix + Dovecot + rspamd.** La Phase 1 Stalwart (`serveur_stalwart`) avait été prototypée et déployée (v0.16.11, install + démarrage en mode récupération). Le prototypage a révélé un projet **trop jeune/volatil diff --git a/docs/identite-sso.md b/docs/identite-sso.md new file mode 100644 index 0000000..5c0933c --- /dev/null +++ b/docs/identite-sso.md @@ -0,0 +1,60 @@ +# Architecture d'identité et SSO + +> **Décision arrêtée (2026-07-02).** Modèle **A** : OpenLDAP source de vérité, +> Keycloak fédéré pour le SSO web, mail en bind LDAP direct. + +## Principe : deux couches, pas deux choix + +- **OpenLDAP = l'annuaire** — *source de vérité* des identités (users, groups, `mail`, + mot de passe). Standard, portable, compris par tout (mail, système, apps). **On crée et + gère les identités ici.** +- **Keycloak = le cerveau SSO** — OIDC/OAuth2/SAML : authentification unique des apps web, + jetons, **MFA**, self-service, politiques. **Fédéré à OpenLDAP** (il lit l'annuaire, il ne + le remplace pas). + +``` + OpenLDAP (source de vérité) + ▲ ▲ + (fédération)│ │ (bind direct) + Keycloak Dovecot / Postfix + (SSO · OIDC · MFA) (IMAP/SMTP auth) + ▲ + (redirection OIDC) + ┌───────────┼────────────┐ + Forgejo Grafana Nextcloud … ← apps web = SSO +``` + +## Chemin d'auth par type de service + +| Type de service | Auth | Pourquoi | +|---|---|---| +| **Apps web** (Forgejo, Grafana, Nextcloud…) | **Keycloak OIDC** (SSO) | un seul login, MFA, jetons | +| **Mail** (Dovecot, Postfix) | **LDAP direct** (bind) | IMAP/SMTP ne parlent pas OIDC ; username + mot de passe | +| **Système / services** (SSSD, etc.) | **LDAP direct** | annuaire standard | +| Tout | → **même OpenLDAP** | identité unifiée, aucun compte en double | + +## Sens de provisionnement + +Les identités se créent et se gèrent dans **OpenLDAP**. Keycloak **fédère** (lit LDAP en +lecture ; écriture optionnelle pour le self-service). Aucune identité n'est « maître » dans +Keycloak : c'est LDAP la référence. Le mail bind directement sur LDAP. + +## Pourquoi ce modèle (et pas Keycloak-source) + +- **Mail-compatible** : Dovecot/Postfix s'authentifient nativement contre LDAP ; contre + Keycloak seul, c'est un casse-tête (OAuth2/XOAUTH2 pas universel côté clients). +- **Portable / souverain** : l'annuaire reste un standard LDAP — chaque écosystème (tenant) + a **son OpenLDAP + son Keycloak fédéré**, réplicable à l'identique. Sert directement la + preuve de portabilité multi-tenant. +- **Séparation des responsabilités** : LDAP = qui existe ; Keycloak = comment on se + connecte au web. Chacun fait ce qu'il fait de mieux. + +## Conséquences pour Set-OPS + +- `serveur_openldap` (déployé) = le pilier annuaire, source de vérité. +- `serveur_keycloak` = pilier SSO, à **fédérer sur OpenLDAP** (User Federation → LDAP). +- `serveur_dovecot` / `serveur_postfix` = auth **LDAP direct** (cohérent avec ce modèle). +- Les apps web déclarées dans le plan → clients **OIDC** de Keycloak. + +*Évolution possible (plus tard) : XOAUTH2 pour le mail via Keycloak, si les clients suivent. +Ça n'est pas requis et ne change pas la source de vérité (LDAP).*