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>
97 lines
4.6 KiB
Markdown
97 lines
4.6 KiB
Markdown
# 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` :
|
|
```bash
|
|
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.
|