TL;DR — Résumé Rapide

Guide complet Keycloak : installation Docker, configuration des realms, clients OpenID Connect et SAML, fédération LDAP, RBAC et haute disponibilité.

Keycloak est la solution open-source leader en Gestion des Identités et des Accès (IAM) — elle fournit le Single Sign-On (SSO), MFA, connexion sociale, fédération LDAP/Active Directory et une autorisation fine-grained via OpenID Connect, OAuth 2.0 et SAML 2.0. Ce guide couvre l’installation avec Docker Compose, la configuration des realms, le RBAC, la fédération d’identités et le clustering haute disponibilité.

Prérequis

  • Docker 25+ et Docker Compose v2 (ou cluster Kubernetes pour l’installation avec operator).
  • PostgreSQL 15+ pour la production (H2 intégré est réservé au développement).
  • Proxy inverse (Nginx ou Traefik) pour la terminaison TLS en production.
  • Notions de base sur OAuth 2.0 (client, flux, tokens).

Architecture de Keycloak

Keycloak organise tout en realms — domaines de sécurité isolés :

ConceptDescription
RealmTenant isolé. Contient utilisateurs, clients, rôles et groupes
ClientApplication enregistrée pour utiliser Keycloak
UtilisateurIdentité dans le realm (locale ou fédérée)
RôleÉtiquette de permission. Rôles de realm ou rôles de client
GroupeCollection d’utilisateurs avec rôles hérités
Fournisseur d’identitéIdP externe (Google, GitHub, SAML, LDAP)
Flux d’authentificationPipeline configurable : login, OTP, WebAuthn

Le realm master est le super-admin — utilisez-le uniquement pour gérer d’autres realms, jamais pour les utilisateurs d’application.


Étape 1 : Installer Keycloak avec Docker Compose

version: "3.9"
services:
  postgres:
    image: postgres:15
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: changeme
    volumes:
      - postgres_data:/var/lib/postgresql/data

  keycloak:
    image: quay.io/keycloak/keycloak:24.0
    command: start
    environment:
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://postgres/keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: changeme
      KC_HOSTNAME: auth.exemple.com
      KC_PROXY: edge
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: adminpass
    ports:
      - "8080:8080"
    depends_on:
      - postgres

volumes:
  postgres_data:
docker compose up -d
# Accédez à la Console d'administration sur http://localhost:8080

Étape 2 : Configuration du Realm

ParamètreValeur recommandée
Nom d’affichageNom de votre marque
Thème de connexionkeycloak ou personnalisé
Exiger SSLexternal requests (production)
Délai d’inactivité SSO30 minutes
Durée du token d’accès5 minutes

Configurez SMTP dans Paramètres du Realm → Email pour les e-mails de réinitialisation de mot de passe.


Étape 3 : Configuration des Clients OpenID Connect

ClientsCréer un client :

  • Type de client : OpenID Connect
  • Client ID : myapp-client
  • Authentification client : Activée (confidentiel) pour les apps serveur ; Désactivée (public) pour les SPA
  • URIs de redirection valides : https://myapp.exemple.com/callback
  • Web origins : https://myapp.exemple.com

Clients Confidentiels vs Publics

CaractéristiqueConfidentielPublic
Possède un secretOuiNon
Cas d’utilisationServeur (Node, .NET, Python)SPA, app mobile
Flux de code authAvec secretAvec PKCE

Étape 4 : Contrôle d’Accès Basé sur les Rôles (RBAC)

# Créer un rôle de realm avec kcadm.sh
kcadm.sh config credentials \
  --server http://localhost:8080 \
  --realm master \
  --user admin --password adminpass

kcadm.sh create roles -r myapp -s name=app-admin
kcadm.sh create roles -r myapp -s name=app-user

Flux recommandé : Rôles → Groupes → Utilisateurs. Assignez les rôles aux groupes et ajoutez les utilisateurs aux groupes.

Les rôles composites regroupent d’autres rôles : créez superutilisateur et ajoutez app-admin et app-user comme composites.


Étape 5 : Fédération d’Identités

Connexion Sociale (Google, GitHub, Microsoft)

Fournisseurs d’identitéAjouter un fournisseurGoogle :

  1. Créez une app OAuth 2.0 dans Google Cloud Console.
  2. Renseignez le Client ID et le Client Secret de Google dans Keycloak.
  3. URI de redirection : https://auth.exemple.com/realms/myapp/broker/google/endpoint.

Fédération LDAP / Active Directory

ParamètreValeur
FournisseurActive Directory
URL de connexionldap://ad.corp.exemple.com
Bind DNCN=svc-keycloak,OU=ComptesService,DC=corp,DC=exemple,DC=com
DN des utilisateursOU=Utilisateurs,DC=corp,DC=exemple,DC=com
Mode de synchronisationFORCE

Exécutez Synchroniser tous les utilisateurs pour importer les utilisateurs AD.


Étape 6 : Flux d’Authentification et MFA

TOTP et WebAuthn

Pour TOTP : AuthentificationFluxbrowserDupliquer → Ajouter Formulaire OTP comme REQUIS.

Pour WebAuthn/Passkeys (Keycloak 22+) :

  1. AuthentificationPolitiquesPolitique WebAuthn — définissez le domaine comme Relying Party ID.
  2. Ajoutez Authentificateur WebAuthn au flux navigateur.

Haute Disponibilité

environment:
  KC_CACHE: ispn
  KC_CACHE_STACK: jdbc-ping
  KC_DB: postgres
  KC_DB_URL: jdbc:postgresql://pgpool/keycloak
  • Activez les sessions sticky sur le répartiteur (cookie AUTH_SESSION_ID).
  • Endpoint de santé : GET /health/ready.

Keycloak vs Alternatives

FonctionnalitéKeycloakAuthentikAutheliaAuth0OktaFusionAuth
Open-sourceOuiOuiOuiNonNonPartiel
Auto-hébergéOuiOuiOuiNonNonOui
SAML 2.0OuiOuiNonOuiOuiOui
Fédération LDAPOuiOuiNonOuiOuiOui
Autorisation fineOui (UMA)NonNonOui (payant)Oui (payant)Partiel
ComplexitéHauteMoyenneFaibleFaibleFaibleMoyenne

Résolution de Problèmes

ProblèmeSolution
”Invalid redirect_uri”Vérifiez les URIs de redirection — correspondance exacte requise
”Client secret not valid”Régénérez le secret dans Clients → Identifiants
Boucle de connexionVérifiez que KC_HOSTNAME correspond à l’URL réelle
E-mail non envoyéVérifiez SMTP dans Paramètres du Realm → Email
Utilisateurs LDAP non synchronisésVérifiez les identifiants de bind et exécutez une synchronisation manuelle

Résumé

  • Les realms isolent les tenants — utilisez toujours un realm dédié pour les applications.
  • Les clients confidentiels utilisent des secrets ; les publics utilisent PKCE.
  • Les groupes avec rôles permettent de scaler le RBAC — évitez d’assigner des rôles directement aux utilisateurs.
  • La synchronisation LDAP en mode FORCE maintient AD comme source faisant autorité.
  • Utilisez KC_CACHE=ispn avec jdbc-ping pour la HA sans dépendances supplémentaires.

Articles Connexes