0 Identité et SSO
Daniel Allaire edited this page 2026-07-04 15:04:58 -04:00

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.