👤 C3.2.1 — SSO, OIDC & Keycloak · Séance 2/2
| Formation | BTS SIO option SLAM — IRIS Mediaschool |
|---|---|
| Bloc | B3 — Cybersécurité des services informatiques |
| Module | M3.2 — Identité numérique et authentification |
| Cours | C3.2.1 — Gestion des identités et des comptes · Séance 2/2 |
| Compétence | B3.2 — Préserver l'identité numérique de l'organisation |
| Durée | 3h30 (10 min intro/rappel + 75 min théorie + 85 min TP + 10 min synthèse) |
| Prérequis | C3.2.1 Séance 1 — LDAP/AD. InnovatTech : annuaire OpenLDAP déployé. |
Introduction — Mise en situation SSO (10 min)
Lors de la séance 1, nous avons déployé l'annuaire OpenLDAP d'InnovatTech. Problème actuel : un utilisateur doit se connecter à 8 applications différentes avec 8 mots de passe. Avec SSO : 1 seule authentification → accès à toutes les applications. Objectif de cette séance : réduire la fatigue due aux mots de passe et améliorer la gestion centralisée des accès.
Section 1 — Protocoles SSO (~50 min)
SAML 2.0
SAML (Security Assertion Markup Language) est un protocole mature pour la fédération d'identité entre un Identity Provider (IdP) et des Service Providers (SP). L'IdP émet des assertions signées XML ; la confiance est établie par échange de métadonnées et certificats.
Flux SP-initiated (le plus courant) :
Utilisateur SP (App) IdP (Keycloak)
│──GET /app──────►│ │
│ │──Redirect AuthnRequest─►│
│◄────────────────│ │
│────────────────────────────────────────►│ (login utilisateur)
│◄────────────────────────────────────────│
│ Assertion SAML (HTTP-POST) │
│──Assertion─────►│ │
│ │──Valide + session───── │
│◄────────────────│ Accès accordé │
OAuth2 — Authorization Code Flow
OAuth2 est un cadre d'autorisation (pas d'authentification) permettant à une application d'obtenir l'autorisation d'agir au nom d'un utilisateur. 4 étapes :
- Authorization Request : le client redirige l'utilisateur vers l'Authorization Server avec client_id, scopes, redirect_uri
- Authorization Code : après consentement, l'Authorization Server renvoie un
codede courte durée - Token Request : le client échange le
codecontre unaccess_token(+refresh_token) via une requête POST directe - Utilisation : le client utilise l'
access_tokenpour appeler l'API protégée (Resource Server)
OAuth2 est un protocole d'autorisation : il permet d'obtenir une permission d'accès aux ressources, mais ne standardise pas l'authentification de l'utilisateur. C'est pour cette raison qu'OpenID Connect a été créé.
OpenID Connect (OIDC)
OIDC est une couche d'identité construite au-dessus d'OAuth2. Il ajoute un ID Token (JWT) qui transporte l'identité de l'utilisateur.
Structure d'un JWT
// Header.Payload.Signature (3 parties séparées par des points)
// Payload décodé (exemple) :
{
"sub": "1234567890", // Identifiant unique de l'utilisateur
"name": "Léa Martin", // Nom complet
"email": "lmartin@innovattech.fr",
"iss": "https://auth.innovattech.fr", // Émetteur (Issuer)
"aud": "crm-app", // Application destinataire (Audience)
"exp": 1708900000, // Expiration (timestamp Unix)
"iat": 1708896400 // Date d'émission (Issued At)
}
Scopes OIDC standards : openid (obligatoire), profile, email, phone. Le scope openid déclenche l'émission de l'ID Token.
SCIM — Provisioning automatisé
SCIM (System for Cross-domain Identity Management) est un protocole REST standardisé pour automatiser la création/modification/suppression d'utilisateurs et de groupes entre un annuaire central et des applications cloud. Plutôt que créer manuellement des comptes dans chaque application, SCIM automatise les opérations CRUD via des endpoints HTTP (POST /Users, PATCH /Users/{id}, DELETE /Users/{id}).
Section 2 — Keycloak (~25 min)
Keycloak est une solution open-source IAM (Identity and Access Management) qui propose un IdP complet supportant OIDC, OAuth2 et SAML.
Concepts clés
| Concept | Description |
|---|---|
| Realm | Espace de noms isolé contenant utilisateurs, rôles et clients (ex : realm "innovattech") |
| Client | Application qui s'authentifie auprès du realm (ex : "crm-app") |
| User | Compte utilisateur dans le realm |
| Role | Représente des droits ou groupes de permissions |
| User Federation | Connexion à un annuaire LDAP/AD externe pour synchroniser les comptes |
Déploiement rapide (développement)
docker run -d --name keycloak -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=AdminPass1! quay.io/keycloak/keycloak:latest start-dev
# Accéder à http://localhost:8080
TP — Déployer Keycloak et configurer un SSO OIDC (85 min)
Scénario : InnovatTech souhaite centraliser l'authentification de 3 applications (CRM, portail RH, ticketing). Votre mission : déployer Keycloak, créer le realm innovattech, configurer un client OIDC crm-app et démontrer un SSO fonctionnel.
Étapes
1. Déployer Keycloak avec Docker (commande ci-dessus)
2. Créer le realm innovattech dans l'interface d'administration
3. Créer un utilisateur de test lmartin avec mot de passe temporaire
4. Créer un client OIDC crm-app (type confidentiel, redirect URI : http://localhost:3000/callback)
5. Inspecter les endpoints OIDC :
# Récupérer les endpoints OIDC du realm innovattech
curl http://localhost:8080/realms/innovattech/.well-known/openid-configuration | python3 -m json.tool
# Identifie : authorization_endpoint, token_endpoint, jwks_uri, userinfo_endpoint
6. Tester le flux Authorization Code et décoder l'ID Token sur jwt.io, identifier ≥5 claims.
7. Optionnel : Configurer la User Federation LDAP pour synchroniser l'annuaire de la séance 1.
Ne jamais exposer le client_secret dans du code côté client (SPA, mobile). Utiliser PKCE pour les clients publics. Le mode start-dev n'est pas adapté à la production.
Politique de mots de passe et MFA : recommandations NIST SP 800-63B, passphrases, algorithmes de hachage modernes (Argon2, bcrypt), TOTP, FIDO2/WebAuthn et déploiement de la MFA sur SSH.
Synthèse (10 min)
Question : Quelle est la différence fondamentale entre OAuth2 et OpenID Connect ?
🎮 Quiz — Testez vos connaissances
3 QCM · 1 Vrai/Faux · 1 Question ouverte
QCM 1 — Nature d'OAuth2
OAuth2 est fondamentalement un protocole d'…
- Authentification (vérification d'identité)
- Autorisation (délégation de permissions d'accès)
- Chiffrement des communications
- Signature numérique des données
📋 Correction
B — Autorisation. OAuth2 est un cadre d'autorisation : il permet à une application (le client) d'obtenir l'autorisation d'agir au nom d'un utilisateur auprès d'un Resource Server. Il ne standardise pas l'authentification de l'utilisateur — c'est OpenID Connect qui ajoute cette couche d'identité.
QCM 2 — ID Token OIDC
Dans OpenID Connect, quel token transporte l'identité de l'utilisateur (claims comme nom, email…) ?
- access_token
- refresh_token
- id_token (JWT)
- bearer_token
📋 Correction
C — id_token (JWT). L'ID Token est un JWT (JSON Web Token) signé par l'Authorization Server qui contient des claims sur l'identité de l'utilisateur (sub, name, email, iss, aud, exp, iat…). Le client peut vérifier sa signature sans interroger une API supplémentaire. L'access_token, lui, est utilisé pour appeler les APIs protégées.
QCM 3 — Keycloak realm
Dans Keycloak, qu'est-ce qu'un realm ?
- Un certificat TLS pour sécuriser les communications
- Un espace de noms isolé contenant utilisateurs, rôles et clients
- Un protocole d'authentification propriétaire de Keycloak
- Un type de token utilisé pour les autorisations
📋 Correction
B. Un realm dans Keycloak est un espace de noms complètement isolé qui contient ses propres utilisateurs, rôles, clients et configurations. Par exemple, le realm "innovattech" contient tous les comptes et applications d'InnovatTech. On peut créer plusieurs realms pour séparer des environnements (développement, production) ou des organisations.
Vrai / Faux
⬜ OAuth2 seul peut être utilisé pour authentifier un utilisateur et connaître son identité sans extension supplémentaire.
📋 Correction
FAUX. OAuth2 est un protocole d'autorisation et ne définit pas comment authentifier un utilisateur ni comment obtenir des informations d'identité. Pour cela, il faut utiliser OpenID Connect (OIDC), qui est une extension d'OAuth2 ajoutant la notion d'ID Token (JWT) contenant les informations d'identité de l'utilisateur. SAML est une autre option pour la fédération d'identité.
Question ouverte
Décrivez les 4 étapes de l'Authorization Code Flow OAuth2 en précisant pour chaque étape les acteurs impliqués et les données échangées. Pourquoi ce flux est-il plus sécurisé que le Implicit Flow ?
📋 Éléments de réponse
Étape 1 — Authorization Request : le Client redirige l'utilisateur (Resource Owner) vers l'Authorization Server avec client_id, scopes demandés et redirect_uri. L'utilisateur s'authentifie et consent. Étape 2 — Authorization Code : l'Authorization Server redirige l'utilisateur vers le redirect_uri du client avec un paramètre code de courte durée (ne contient pas les droits en clair). Étape 3 — Token Request : le Client échange le code via une requête POST directe serveur-à-serveur (avec client_secret ou PKCE), en dehors du navigateur. L'Authorization Server retourne access_token et refresh_token. Étape 4 — Utilisation : le Client utilise l'access_token pour appeler le Resource Server. Ce flux est plus sécurisé que le Implicit Flow car l'access_token n'est jamais exposé dans l'URL du navigateur (il transite serveur-à-serveur), réduisant les risques de vol par historique de navigation ou logs proxy.
