Set-OPS-Public/wiki/Identité-et-SSO.md
Daniel Allaire 3964a712b1 wiki : socle pédagogique + unité-pilote « Identité & SSO »
Set-OPS comme compagnon pédagogique : chaque service = une lentille sur un
fondamental TIC, méthodes génériques (on apprend OIDC, pas Keycloak).

Socle (source versionnée dans wiki/, à publier dans le wiki Forgejo) :
- Home : cadrage (moteur souverain ET outil d'apprentissage) ;
- _Sidebar : navigation (~15 unités, pilote active, reste à venir) ;
- Identité-et-SSO : unité-pilote, moule à 4 temps (concept → Set-OPS →
  transférable → à toi de jouer) avec exercices casse-répare.

Le wiki pointe vers docs/ (anti-dérive), ne le recopie pas.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 14:59:10 -04:00

4.6 KiB

Identité & SSO

Unité d'apprentissage — une lentille sur un fondamental des TIC. Moule : ① le concept → ② comment Set-OPS le fait → ③ pourquoi c'est transférable → ④ à toi de jouer.


① Le concept (générique)

Authentification vs autorisation — deux questions distinctes, souvent confondues :

  • Authentifier = qui es-tu ? (prouver son identité, ex. mot de passe).
  • Autoriser = as-tu le droit ? (permissions une fois identifié).

L'annuaire = la source de vérité des identités. Un seul endroit où existent les comptes ; tout le reste s'y réfère. Une identité, un mot de passe — partout.

SSO (Single Sign-On) = une authentification donne accès à N services, sans se reconnecter à chacun.

OIDC / OAuth2 = le protocole standard du SSO web. L'application ne voit jamais ton mot de passe : elle délègue la connexion à un fournisseur d'identité (IdP), qui lui renvoie un jeton signé prouvant qui tu es.

Fédération = un système d'identité en délègue un autre (ex. l'IdP lit les comptes depuis l'annuaire, sans les recopier).


② Comment Set-OPS le fait (le vrai, dans le lab)

Trois pièces, un rôle chacun :

Pièce Rôle Concept incarné
OpenLDAP (serveur_openldap) l'annuaire — la source de vérité. testmail y vit. annuaire
Keycloak (serveur_keycloak) le fournisseur d'identité (IdP) SSO. Il fédère OpenLDAP (lit les comptes en LDAP, lecture seule). SSO, OIDC, fédération
oauth2-proxy (serveur_oauth2_proxy) une passerelle OIDC pour les apps sans OIDC natif. motif proxy d'authentification

Les applications se branchent de deux façons :

  • OIDC natif — Grafana, Forgejo → bouton « Se connecter avec Chezlepro ».
  • Sans OIDC — Icinga Web 2 → placé derrière oauth2-proxy, qui fait l'OIDC à sa place.

Le flux, quand testmail ouvre Grafana :

Navigateur ──> Grafana : "connecte-moi"
Grafana   ──> redirige vers Keycloak (IdP)
Keycloak  ──> demande le mot de passe ; le VÉRIFIE contre OpenLDAP (fédération)
Keycloak  ──> renvoie au navigateur un CODE
Navigateur──> Grafana échange le code contre un JETON signé
Grafana   ──> crée la session : "tu es testmail" ✔

Résultat : une identité (testmail, un seul mot de passe LDAP) ouvre le courriel, Grafana, Forgejo et Icinga. Change le mot de passe une fois, il change partout.


③ Pourquoi c'est transférable

Tu n'as pas appris « Keycloak ». Tu as appris l'annuaire + OIDC + la fédération + le motif passerelle. Le même schéma existe partout :

Set-OPS Équivalents ailleurs
OpenLDAP Active Directory · FreeIPA · 389-DS
Keycloak Entra ID (ex-Azure AD) · Okta · Authentik · Zitadel
oauth2-proxy tout reverse-proxy OIDC (Traefik ForwardAuth, Pomerium…)
Fédération LDAP→IdP AD → ADFS/Entra ; annuaire → n'importe quel IdP

Change les produits, le schéma reste. C'est ça, un savoir générique.


④ À toi de jouer

Prérequis : accès au lab (VPN), /etc/hosts pointant les services sur l'edge.

  1. Vis le SSO. Ouvre https://grafana.lab.chezlepro.internal → « Se connecter avec Chezlepro » → testmail. Puis ouvre Forgejo, puis Icinga : tu n'es reconnecté nulle part.
  2. Observe le flux. Rouvre Grafana en navigation privée, ouvre les outils dév (F12 → Réseau) : repère la redirection vers Keycloak, puis le retour avec un code=. C'est ① en action.
  3. Interroge l'annuaire (la source de vérité). Sur un nœud avec ldap-utils :
    ldapsearch -x -H ldaps://id-ldap-01.lab.chezlepro.internal \
      -b ou=people,dc=lab,dc=chezlepro,dc=internal '(uid=testmail)'
    
    Tu vois l'entrée que Keycloak fédère — il ne l'a pas recopiée.
  4. Casse & répare (la fédération). Dans la console admin Keycloak → User Federation → désactive le fournisseur LDAP. Reconnecte-toi : échec (l'IdP ne voit plus l'annuaire). Réactive : ça remarche. Tu viens de sentir la dépendance requise entre l'IdP et l'annuaire.

Pour aller plus loin (référence technique — dépôt)

  • Rôles : roles/serveur_openldap, roles/serveur_keycloak, roles/serveur_oauth2_proxy.
  • Passerelle générique : roles/serveur_oauth2_proxy/ (README) — placer du SSO devant toute app.
  • Thème de connexion (identité Alliance) : roles/serveur_keycloak/files/themes/alliance-boreale/.
  • Concept de liaison requise (IdP ⟶ annuaire) : docs/bindings-conception.md §11.