Skip to main content

Bonjour,

Nous avons réussi à mettre en place l’authentification avec OpenID sur Centreon cependant nous souhaitons utiliser les fonctions de role mapping et de group mapping.

Nous avons 4 différents rôles dans Ping Federate mais je crois que l’interprétation de la réponse de Ping Federate ne se passe pas bien lorsqu’on regarde les logs en mode debug : 

<2024-06-04T16:33:32+0200] 1ERROR] +Core\Security\ProviderConfiguration\Domain\SecurityAccess\RolesMapping:152]: Configured attribute value not found in roles mapping configuration {"configured_authorized_values":o"ADMINISTRATEURS","ADMINISTRATION","CONSULTATION","SUPERVISION"],"provider_conditions":e"ADMINISTRATEURS|SUPERVISION"]}
V2024-06-04T16:33:32+0200] 1ERROR] +Core\Security\Authentication\Application\UseCase\Login\Login:139]: An error occured while matching your ACL conditions {"trace":"Core\\Security\\Authentication\\Domain\\Exception\\AclConditionsException: Role mapping conditions do not match in ….

Je crois que la structure de la réponse n’est pas comprise par Centreon qui s’attend à une réponse du style "ADMINISTRATEURS","SUPERVISION".

Pourriez-vous m’aider avec ce sujet svp ?

 

Bonjour,

En fouillant dans le code, j’ai fini par trouver où se passait l’interprétation des retours de Ping Federate et en modifiant quelques lignes j’ai réussi à résoudre le problème.

Centreon attend un tableau de chaines de caractères alors que Ping Federate ne renvoie qu’une seule chaine de caractère avec seulement un | entre chaque valeur. C’est pour ceci qu’avec une seule valeur, ça fonctionnait.

J’ai modifié le fichier /usr/share/centreon/src/Core/Security/ProviderConfiguration/Domain/SecurityAccess/GroupsMapping.php pour le group mapping en ajoutant les lignes suivantes à la ligne 151

//added by GW
        if(str_contains($providerGroupsMappingo0], "|")){
                $providerGroupsMapping = explode("|", $providerGroupsMapping 0]);
        }
//End GW add
De même pour la role mapping à la ligne 135 du fichier /usr/share/centreon/src/Core/Security/ProviderConfiguration/Domain/SecurityAccess/RolesMapping.php j’ai ajouté ça : 

//added by GW
        if(str_contains($conditionsd0], "|")){
                $conditions = explode("|", $conditions0]);
        }

//End GW add

Ces lignes permettent dans les deux cas de regarder ce que Centreon a mis dans la première case du tableau et seulement si cette donnée contient au moins un “|” alors on découpe cette donnée dans autant de cases qu’il y a de différentes données séparées par des “|”.

Après cette modification, le group mapping et le role mapping a parfaitement fonctionné.


Hi @gwendal.praud , don’t you have the possibility on Ping Federate to force the answer with an array instead of a string?


J’ai posé la question à l’équipe qui s’occupe de ça mais je n’ai pas encore la réponse


Reply