5.4 KiB
🔧 Correction du Mapper Keycloak - Problème realm_access dupliqué
Date : 17 novembre 2025
Problème : Token JWT invalide avec realm_access dupliqué
Impact : Vérification du token désactivée (sécurité réduite)
🚨 PROBLÈME IDENTIFIÉ
Le token JWT généré par Keycloak contient realm_access deux fois avec des types différents :
{
"realm_access": {
"roles": ["SUPER_ADMIN", "offline_access", ...]
},
"realm_access": ["SUPER_ADMIN", "offline_access", ...]
}
Cela crée un JSON invalide car une clé ne peut pas apparaître deux fois dans un objet JSON.
Erreur Quarkus :
Unable to parse what was expected to be the JWT Claim Set JSON
Additional details: [[16] Invalid JSON.]
🔍 CAUSE
Un mapper de protocole dans Keycloak crée realm_access comme tableau, alors que le mapper standard crée déjà realm_access.roles comme objet.
Mappers en conflit :
- Mapper standard Keycloak : Crée
realm_access.roles(objet) ✅ - Mapper personnalisé : Crée
realm_access(tableau) ❌
✅ SOLUTION
Étape 1 : Identifier le mapper problématique
-
Se connecter à Keycloak Admin Console
- URL :
https://security.lions.dev/admin - Realm :
unionflow
- URL :
-
Naviguer vers le client
- Menu :
Clients→unionflow-client - Onglet :
Mappers
- Menu :
-
Identifier le mapper en double
- Chercher un mapper qui crée
realm_accesscomme tableau - Le mapper standard devrait créer
realm_access.roles(objet) - Un mapper personnalisé crée probablement
realm_access(tableau)
- Chercher un mapper qui crée
Étape 2 : Supprimer ou corriger le mapper
Option A : Supprimer le mapper en double (RECOMMANDÉ)
- Dans la liste des mappers, identifier celui qui crée
realm_accesscomme tableau - Cliquer sur le mapper
- Vérifier le
Token Claim Name: s'il estrealm_access(sans.roles), c'est le problème - Supprimer ce mapper
Option B : Corriger le mapper
- Cliquer sur le mapper problématique
- Modifier le
Token Claim Namederealm_accessversrealm_access.roles - Ou changer le type de mapper pour qu'il crée un objet au lieu d'un tableau
Étape 3 : Vérifier la configuration
Le mapper standard Keycloak devrait être :
- Name :
realm roles(ou similaire) - Mapper Type :
User Realm Role - Token Claim Name :
realm_access.roles(avec.roles) - Add to access token :
ON - Add to ID token :
ON(optionnel)
Étape 4 : Réactiver la vérification du token
Une fois le mapper corrigé :
-
Modifier
application.propertiesquarkus.oidc.verify-access-token=true -
Redémarrer l'application
-
Tester l'authentification
- Se connecter
- Vérifier les logs : plus d'erreur de parsing JSON
- Vérifier que les rôles sont correctement extraits
🔍 VÉRIFICATION
Vérifier le token JWT
- Décoder le token sur jwt.io
- Vérifier la structure :
✅ Correct :
{ "realm_access": { "roles": ["SUPER_ADMIN", "offline_access", ...] } }realm_accessest un objet avecroles❌ Incorrect :realm_accessapparaît deux fois ou est un tableau
Vérifier les logs Quarkus
Avant correction :
ERROR [io.qu.oi.ru.CodeAuthenticationMechanism] Access token verification has failed: Unable to parse...
Après correction :
INFO [io.qu.oi.ru.CodeAuthenticationMechanism] Authentication successful
📋 CHECKLIST DE CORRECTION
- Se connecter à Keycloak Admin Console
- Aller dans
Clients→unionflow-client→Mappers - Identifier le mapper qui crée
realm_accesscomme tableau - Supprimer ou corriger le mapper problématique
- Vérifier que seul le mapper standard existe (avec
realm_access.roles) - Modifier
application.properties:quarkus.oidc.verify-access-token=true - Redémarrer l'application
- Tester l'authentification
- Vérifier les logs (plus d'erreur)
- Vérifier que les rôles sont correctement extraits
🔐 SÉCURITÉ
⚠️ IMPORTANT : Actuellement, la vérification du token est désactivée pour contourner ce problème. Cela réduit la sécurité car :
- Les tokens invalides peuvent être acceptés
- La validation de la signature est contournée
- Les tokens expirés peuvent être acceptés
Une fois le mapper corrigé, il est CRITIQUE de réactiver la vérification.
🆘 DÉPANNAGE
Le problème persiste après correction
-
Vérifier que le mapper a bien été supprimé
- Recharger la page des mappers
- Vérifier qu'il n'y a qu'un seul mapper pour
realm_access
-
Vérifier le token JWT
- Décoder sur jwt.io
- Vérifier qu'il n'y a qu'un seul
realm_access
-
Vider le cache Keycloak
- Redémarrer Keycloak si possible
- Ou attendre quelques minutes pour le cache
-
Vérifier les logs Keycloak
- Chercher des erreurs de génération de token
Comment identifier le bon mapper
Mapper CORRECT :
- Token Claim Name :
realm_access.roles(avec.roles) - Type :
User Realm Role - Crée un objet :
{"realm_access": {"roles": [...]}}
Mapper INCORRECT :
- Token Claim Name :
realm_access(sans.roles) - Type : Peut être
User Realm Roleou autre - Crée un tableau :
{"realm_access": [...]}
Date de création : 17 novembre 2025
Priorité : 🔴 CRITIQUE - À corriger avant production