Le découpage en realms

Choisir entre un realm unique, un realm par population ou un realm par application, en sachant ce que le realm isole et ce qu'un réglage par client permet sans en créer un nouveau.

Keycloak essentiel Cours 6 sur 17 de Keycloak Academy 35 min 5 questions de quiz Cours suivant : Les sources d'utilisateurs et la reprise des comptes

Sur cette page
  1. Ce que porte un realm
  2. Ce qui se règle par client, sans créer de realm
  3. Organizations : une troisième voie
  4. Administration et délégation
  5. Le coût d’un grand nombre de realms
  6. Trois options comparées
  7. Une grille pour décider
  8. Pourquoi ce choix coûte cher à défaire
  9. Natif, extension ou hébergeur
  10. Quiz

Le realm est l’unité d’isolement de Keycloak (voir le cours 1). Combien en créer, et selon quel critère, est la première vraie décision d’architecture. Elle conditionne le SSO, la reprise des comptes, les politiques de sécurité et l’administration. Elle se défait mal : une fois les applications raccordées et les comptes repris, changer de realm revient à refaire une partie du raccordement. Ce cours donne les éléments pour trancher et pour justifier le choix.

Ce que porte un realm

Tout ce qui suit est défini une fois par realm et s’applique à tous ses clients :

  • les utilisateurs, leurs credentials et le user profile ;
  • les sessions SSO et leurs durées (inactivité, durée maximale) ;
  • la politique de mots de passe et la protection contre la force brute ;
  • les sources d’utilisateurs (fédération LDAP, User Storage) et les identity providers ;
  • les thèmes par défaut (connexion, compte, e-mail, administration) ;
  • les clés de signature et l’émetteur des jetons ;
  • la configuration SMTP, les événements et leur conservation ;
  • l’administration : rôles du client realm-management, permissions fines.

Deux realms ne partagent ni utilisateurs ni sessions. Un même individu présent dans deux realms y a deux comptes, deux identifiants techniques et deux mots de passe. Le seul pont natif est le brokering : un realm peut déclarer l’autre comme fournisseur d’identité OIDC. On obtient alors une forme de SSO, mais au prix de deux comptes liés et d’un écran supplémentaire à la première connexion.

Ce qui se règle par client, sans créer de realm

Beaucoup de demandes « il nous faut un realm » portent en fait sur des réglages disponibles au niveau du client :

Besoin expriméRéglage par clientLimite
Page de connexion à ses couleursLogin theme sur le clientThèmes de compte et d’e-mail communs au realm
MFA obligatoire pour cette applicationSurcharge du flux browser, ou niveau d’authentification (ACR) minimalLa politique de mots de passe reste celle du realm
Parcours différent selon le contexteClient policy avec l’exécuteur de sélection de flux (26.2 et suivantes)Configuration plus technique à maintenir
Sessions plus courtesClient session idle et max sur le clientBornées par les durées du realm
Jeton spécifiqueClient scopes et mappers dédiésAucune
Connexion directe vers un IdP externeParamètre kc_idp_hint envoyé par l’applicationLe choix est côté application
Population partenaire avec son IdPOrganizationsFonction récente, à éprouver

La surcharge de flux se voit dans la représentation du client :

{
  "clientId": "portail-sensible",
  "attributes": {
    "login_theme": "theme-portail",
    "minimum.acr.value": "renforce"
  },
  "authenticationFlowBindingOverrides": {
    "browser": "6a30d2b6-df6a-4c93-b30a-f9c2038ed26d"
  }
}

Ce qui ne se règle pas par client : la politique de mots de passe, la force brute, le user profile, les required actions disponibles, les sources d’utilisateurs, les durées maximales de session SSO. Si deux populations ont besoin de valeurs différentes pour ces réglages, c’est un argument fort pour deux realms.

Organizations : une troisième voie

Depuis Keycloak 26.0, Organizations est supporté. Dans un même realm, une organisation regroupe des membres, déclare un ou plusieurs domaines e-mail et peut être associée à un fournisseur d’identité. À la connexion, l’utilisateur saisit son e-mail et Keycloak le route vers l’IdP de son organisation. Un claim organization peut être ajouté aux jetons via le client scope du même nom.

La fonction évolue vite dans la branche 26 : gestion des invitations (26.5), groupes propres à chaque organisation (26.6), délégation de l’administration d’une organisation (26.7), IdP partagé entre organisations (26.8). La version mineure réellement déployée compte donc beaucoup. Organizations est approfondi au cours 8. Retenez ici qu’avant de proposer un realm par partenaire, il faut regarder si une organisation par partenaire suffit.

Administration et délégation

L’administration suit aussi le découpage. Les droits d’un realm sont portés par les rôles de son client realm-management : donner manage-users à l’équipe support des usagers ne lui ouvre que ce realm. Avec un realm par population, chaque équipe gestionnaire reçoit naturellement son périmètre.

Dans un realm unique, la délégation passe par les permissions fines d’administration, refondues et supportées depuis Keycloak 26.2 : elles permettent par exemple de limiter une équipe à la gestion des membres d’un groupe. C’est plus fin, mais plus long à concevoir et à auditer. Si l’argument principal pour séparer deux populations est « deux équipes différentes les administrent », comparez les deux options avant de trancher (cours 8).

Le coût d’un grand nombre de realms

La documentation ne fixe pas de nombre maximal de realms. Mais chaque realm ajoute :

  • de l’administration : clients, flux, thèmes, politiques et mappers à dupliquer et à maintenir cohérents ;
  • de la charge : caches, clés, et dans le realm master un client d’administration par realm, dont les rôles s’ajoutent au rôle admin. Des retours d’expérience communautaires font état de ralentissements de la console et des démarrages à partir de quelques centaines de realms ;
  • de la friction pour l’usager : un compte et un mot de passe par realm, pas de SSO sans brokering.

Un hébergeur peut aussi imposer ses propres limites (nombre de realms par offre, volumétrie). C’est un point à vérifier avec lui avant d’écrire le document d’architecture.

Trois options comparées

CritèreUn seul realmUn realm par populationUn realm par application
SSO entre applicationstotalau sein d’une populationaucun sans brokering
Politiques différenciées (mots de passe, force brute, user profile)nonoui, par populationoui, par application
Comptes en double pour un même individunonsi l’individu relève de deux populationssystématique s’il utilise plusieurs applications
Administrationune configurationquelques configurations prochesautant de configurations que d’applications
Délégation à une équipepermissions fines dans le realmnaturelle par realmnaturelle par realm
Coût d’un changement ultérieurséparer une population est lourdfusionner deux populations est lourdfusionner est très lourd
Cas typiqueune population homogèneagents, usagers, partenaires aux exigences distinctesrarement justifié, sauf application isolée par contrainte réglementaire

En pratique, la plupart des architectures retiennent un realm par population quand les exigences de sécurité ou de source d’identité diffèrent réellement (agents fédérés à un annuaire, usagers en auto-inscription), et un realm unique sinon. Le realm par application est l’exception à justifier.

Une grille pour décider

Posez ces questions, dans cet ordre :

  1. Qui sont les populations ? Pour chacune : source de vérité, volume, mode d’inscription.
  2. Doivent-elles partager le SSO ? Si un même individu circule entre leurs applications, un realm commun s’impose ou le brokering devient nécessaire.
  3. Leurs politiques diffèrent-elles ? Mots de passe, MFA de base, durées de session, attributs obligatoires. Si oui pour les réglages non surchargeables par client, séparez.
  4. Qui administre quoi ? Une équipe distincte par population plaide pour des realms distincts, ou pour des permissions fines.
  5. Que demande chaque application au-delà ? Thème, MFA renforcé, jeton spécifique : presque toujours un réglage de client.
  6. Que prépare-t-on pour la suite ? Nouvelles populations, partenaires, fédération d’identité nationale : anticiper un realm ou des organisations.

Pourquoi ce choix coûte cher à défaire

Changer un utilisateur de realm n’est pas une opération de Keycloak. Il faut exporter et réimporter le compte, avec ses credentials, ses liens vers les fournisseurs d’identité et ses facteurs. L’émetteur des jetons change, et souvent l’identifiant sub aussi. Chaque application qui stocke cet identifiant ou valide l’émetteur doit être reconfigurée, et toutes les sessions sont perdues.

Fusionner deux realms est encore plus délicat : doublons d’e-mails, conflits de noms de rôles et de clients, politiques à réconcilier. C’est pourquoi le découpage doit être décidé avant le raccordement massif des applications.

Mesurer l'isolement d'un realm et ce qu'un client permet

25 min

Installer le lab
  1. Depuis keycloak-academy-lab/, préparez kcadm.
kcadm() { docker compose exec -T keycloak /opt/keycloak/bin/kcadm.sh "$@"; }
kcadm config credentials --server http://localhost:8080 --realm master --user admin --password admin
  1. Créez deux realms, agents et usagers, avec un utilisateur chacun.
for R in agents usagers; do
  kcadm create realms -s realm=$R -s enabled=true
  kcadm create users -r $R -s username=test-$R -s email=test-$R@example.org \
    -s firstName=Test -s lastName=$R -s enabled=true
  kcadm set-password -r $R --username test-$R --new-password 'Academy2026!'
done
  1. Dans une fenêtre privée, connectez-vous à http://localhost:8080/realms/agents/account avec test-agents. Ouvrez ensuite http://localhost:8080/realms/usagers/account dans le même onglet : un nouveau formulaire de connexion s’affiche, et test-agents y est refusé. Aucune session ni aucun compte n’est partagé.
  2. Donnez au client account-console du realm agents l’ancien thème de connexion keycloak.
AC=$(kcadm get clients -r agents -q clientId=account-console --fields id --format csv --noquotes)
kcadm update clients/$AC -r agents -s 'attributes.login_theme=keycloak'
  1. Dans une nouvelle fenêtre privée, comparez la page de connexion de http://localhost:8080/realms/agents/account (thème keycloak) et celle de http://localhost:8080/admin/agents/console (thème par défaut keycloak.v2). Même realm, même compte, deux apparences.
  2. Dupliquez le flux browser et affectez la copie au seul client account-console.
kcadm create authentication/flows/browser/copy -r agents -s newName=navigateur-compte
FID=$(kcadm get authentication/flows -r agents --fields id,alias --format csv --noquotes \
  | grep navigateur-compte | cut -d, -f1)
kcadm update clients/$AC -r agents -s "authenticationFlowBindingOverrides.browser=$FID"
kcadm get clients/$AC -r agents | grep -A2 authenticationFlowBindingOverrides
  1. Dans la console d’administration, ouvrez le client account-console, onglet Advanced, section Authentication flow overrides : le flux navigateur-compte y figure. Vous pourrez y ajouter un OTP au cours 4 sans toucher aux autres clients.
  2. Appliquez la grille de décision à un cas que vous connaissez : notez les populations, le besoin de SSO entre elles et les réglages qui ne peuvent pas être surchargés par client. Concluez sur un nombre de realms et justifiez-le en trois phrases.

Natif, extension ou hébergeur

Natif : fourni par Keycloak, à configurer. Extension : demande du code à maintenir (un SPI, le mécanisme de plugin de Keycloak). Hébergeur : dépend de la plateforme qui héberge Keycloak, à vérifier avec elle.

CapacitéVerdictPrécision
Isolement complet entre realms (utilisateurs, sessions SSO, politiques, clés)NatifChaque realm est un émetteur distinct, sans partage de comptes ni de sessions.
Thème de connexion par clientNatifRéglage Login theme sur le client. Les thèmes de compte et d'e-mail restent fixés au niveau du realm.
Parcours d'authentification par clientNatifSurcharge des flux browser et direct grant sur le client, ou sélection dynamique du flux par client policy depuis 26.2.
Politique de mots de passe, force brute, user profile différents selon la population dans un même realmExtensionCes réglages sont uniques par realm. Les différencier sans changer de realm demande des authenticators ou validateurs spécifiques.
Organizations (rattachement de membres, fournisseur d'identité et domaine par organisation)NatifSupporté depuis Keycloak 26.0, enrichi au fil des versions mineures 26.x (groupes d'organisation, IdP partagés).
SSO entre deux realmsNatifPossible seulement en déclarant un realm comme fournisseur d'identité de l'autre (brokering), avec deux comptes liés.
Nombre de realms autorisés et version mineure 26.x déployéeHébergeurLimites de volumétrie et version exacte à vérifier avec l'hébergeur : les fonctions disponibles varient fortement entre 26.0 et 26.8.

Vérifier ce que vous avez retenu

5 questions

  1. Deux populations (agents internes et usagers) doivent avoir des politiques de mots de passe différentes et ne jamais partager de session. Quel découpage est le plus naturel ?

  2. Une application veut une page de connexion à ses couleurs et un OTP systématique, alors que les autres applications du même public n'en ont pas besoin. Que proposez-vous ?

  3. Un comité propose un realm par application « pour l'étanchéité ». Quel argument pèse le plus contre ?

  4. Des partenaires externes, chacun avec son propre fournisseur d'identité, doivent accéder aux mêmes applications que les agents. Quelle option examiner avant de créer un realm par partenaire ?

  5. Pourquoi le découpage en realms est-il le choix le plus coûteux à défaire plus tard ?