Pour des raisons de maintenance du site, un arrêt du site aura lieu lundi 16 décembre 2019 à partir de 18H00, pour une durée estimée de 30 minutes.

Veuillez nous excuser pour les désagréments que cette opération pourrait causer.

Authentification SAML et Synchronisation LDAP

Sanh LY · le 06/09/16 à 16:08

Infos techniques : JCMS 9.0.2 / Module SAML v.1.0-dev

 

Bonjour,

Nous avons mis en place un serveur SSO commun à toutes nos entités et nous utilisons le SAML pour gérer l'authentification des utilisateurs.

Nous rencontrons aujourd'hui un souci avec l'authentifcation SAML d'utilisateurs de l'une de nos entités. Cette entité (entité SO) dispose d'un annuaire différent de celui de l'entité mère (entité SH).

Nous avons constaté que la méthode d'authentification SAML "SAMLAuthenticationHandler" effectuait par défaut une synchronisation du compte LDAP de l'utilisateur. Cette synchronisation détermine le serveur LDAP en fonction du login si celui-ci contient le domaine (SH\tbu ou tbu@SH par exemple).

Dans notre cas, le domaine n’est pas présent dans le login et on utilise donc le serveur LDAP par défaut : celui de l'entité SH. C’est pourquoi lorsqu’un utilisateur de l'entité SO essaye de se connecter, la synchronisation avec le serveur LDAP échoue ainsi que l’authentification.

 

Pour corriger cela, nous pensons qu'il faudrait désactiver la synchronisation LDAP lors de l'authentification SAML soit en ajoutant un paramètre d'activation / désactivation de la synchronisation LDAP dans le module SAML, soit en supprimant directement la synchronisation en modifiant le code comme suit (dans la méthode login de la classe SAMLAuthenticationHandler) :

        if(LdapManager.getInstance().isLdapEnabled())
        {
            if(logger.isDebugEnabled())
            {
                logger.debug((new StringBuilder()).append("Attempt to retrieve SAML Member from LDAP, login is \"").append(s1).append("\".").toString());
            }
            member = synchronizeAccount(s1);
        } else
        {
            if(logger.isDebugEnabled())
            {
                logger.debug((new StringBuilder()).append("Attempt to retrieve SAML Member from login \"").append(s1).append("\".").toString());
            }
            member = channel.getMemberFromLogin(s1);
        }


Pouvez-nous nous dire si les solutions proposées vous semblent correctes et réalisables ?

Merci d'avance pour votre retour.

4 pts
Olivier Jaquemet · le 06/09/16 à 16:59

Bonjour,

Si je reprends votre contexte : 

  • Coté LDAP : Vous avez configuré plusieurs annuaires LDAP afin de bénéficier d'une synchronisation "multi-domaine" des membres et des groupes dans JCMS.
  • Coté Authentification SAML : Vous avez activé l'authentification via le module SAML, il n'y a donc pas de saisi de login/mot de passe coté JPlatform, juste le retour d'une réponse d'authentification, émise par l'IdP. Le point important; vous précisez "le domaine n’est pas présent dans le login".

 Comme vous l'avez très bien analysé en décompilant les classes du produit, la synchronisation d'un utilisateur  dans un contexte multi domaine requiert la présence d'une information discriminante dans le login (celui reçu pas la couche de synchronisation) afin de contacter le serveur LDAP correspondant à l'utilisateur. (en effet il peut y avoir 2 johnsmith dans 2 domaines disctint).
Ce point là n'est pas spécifique à la mécanique d'authentification SAML, mais à la couche de synchronisation de des membres dans JPlatforme, couche utilisée par l'ensemble des modules.

 

Bonne nouvelle, le processus d'authentification SAML vous permet déjà de configurer le login utilisé dans ce processus de synchrornisation. Comme évoqué dans la section 5.5 IdP et JCMS : Configuration de l'attribut de login de la documentation du module SAML. 

Pour procéder à la configuration :

  • Coté IdP : Consultez la documentation de votre IdP pour inclure l'attribut de votre choix dans la réponse, et définir son nom
  • Coté JCMS : Configurez le Nom de l'attribut (aka type de revendication) du login à chercher dans la réponse
    • soit via l'interface d'édition des propriétés du module
    • soit directement dans custom.prop (auquel cas un redémarrage est nécessaire) 
      jcmsplugin.saml.authn-response.attribute-statement-mbr-mapping.login: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn

La précision manquante dans cette documentation est certainement la suivante :

Dans un contexte de synchronisation LDAP multi-domaine, la valeur de l'attribut utilisé doit contenir une information discriminante permettant de contacter l'annuaire LDAP correspondant à l'utilisateur.
Sur AD FS (je ne sais pas si c'est votre cas), c'est pas exemple le cas de "l'UPN (userPrincipalName)" ou du "Windows account name" .

Si cette précision vous permet d'avancer, je l'ajoute dans la documentation après confirmation de votre part.

0 pt
Sanh LY · le 08/09/16 à 17:31

Bonjour,

Tout d'abord je vous remercie pour votre retour rapide.

Concernant notre configuration LDAP, nous n'avons pas de synchro "multi-domaine" comme vous l'expliquez.
Nos champs pour les mêmes informations sont différents selon les annuaires. Aussi notre intégrateur (ASI) a donc utilisé sur le module Synchro OpenLDAP pour intégrer le second annuaire.

Par ailleurs nous ne disposons pas de discriminant dans le login. Il se compose pour l'entité SO de la 1ère lettre du prénom suivi du nom (ex : TBURDET) et pour l'entité mère SH d'un trigramme (ex: tbu). Seule une expression régulière définie au niveau du module Synchro OpenLDAP permet de gérer la notion de discriminant.

Enfin nous ne souhaitons pas de synchronisation du compte avec le ou les annuaires lors de l'authentification. Seule la synchronisation périodique doit mettre à jour les membres de notre intranet.

Cordialement,

#1
  • Jalios ne propose pas de module Synchro OpenLDAP, je ne connais donc pas son fonctionnement ni son implémentation.
    par conséquent si ce module ne suit pas le standard Jalios sur la synchronisation LDAP, en particulier en cas de configuration multi annuaire, le reste de la suite applicative Jalios n'est pas nécessairement compatible.
  • La sélection de l'annuaire à utiliser pour synchroniser un utilisateur, basé sur une expression régulière du login, n'est pas une implémentation standard. Je suppose que cela fait parti de ce module que vous évoquez. En conséquence le reste des modules ne sont pas prévu pour s'intégré avec ce fonctionnement spécifique.
  • Concernant votre demande d'évolution du module SAML : pouvoir désactiver l'utilisation de la synchronisation LDAP à l'authentification, même si le LDAP est activé globalement sur le site.
    Cette demande me semble pertinente et pourrait avoir des cas d'usages au dela ede votre architecture.
    J'ai donc saisi l'évolution SAML-8
    S'agissant d'une option simple à mettre en oeuvre, je l'ai planifié dès maintenant pour la prochaine version du module, prévu pour mi octobre.
    Cette évolution vous permettra de contourner la problématique que vous rencontrez.
Olivier Jaquemet · le 08/09/16 à 17:51
#2

Le module d'authentification SAML 1.1 incluant l'évolution SAML-8 est officiellement disponible au téléchargement : Module d'authentification SAML 1.2

Olivier Jaquemet · le 14/12/16 à 11:44
0 pt
Sanh LY · le 12/09/16 à 10:37

Bonjour,

Pour être bien clair, si un module Synchro OpenLDAP a été réalisé c'est parce qu'il nous avait été indiqué que nous ne pouvions pas utiliser la configuration multi-domaine du module de base. En effet les champs à utiliser pour les mêmes informations n'étaient pas les mêmes dans chaque annuaire. Par exemple le champ Login de Jalios correspond au champ samAccountName dans l'annuaire Sham et au champ uid dans l'annuaire Jalios.

 

Concernant la modification tracée sous la demande SAML-8 nous vous remercions de la prise en compte. Néanmoins nous avons besoin d'une solution rapide car en l'état nous sommes complètement incapables de mettre en place l'authentification SAML. Et nous ne pouvons pas nous passer de cette authentification pour le lancement en production de notre intranet.

Serait-il possible du coup d'avoir une version du module SAML avec la correction "rapide" proposée (grosso modo la suppression du code de synchronisation LDAP) ? Si cela n'est pas possible pouvons-nous la mettre en place nous même sans casser la garantie ?

 

Merci par avance pour votre retour,

Sylvain

#1

Bonjour Sylvain ?,

Nous sommes en cours d'analyse de ce problème avec ASI et nous allons vous fournir un correctif conjoint dès que possible (au plus tard ce mercredi 14), soit via une correction/évolution du module Synchro OpenLDAP si c'est possible, soit via l'évolution du module SAML comme évoqué (avec mise à disposition d'une version intermédiaire).

PS : merci d'utiliser un compte par utilisateur quand vous contribuez sur Community. Nous pouvons facilement vous attribuer les droits nécessaires, il n'est jamais souhaitable en terme de suivi de partager les comptes.

Olivier Jaquemet · le 12/09/16 à 11:44
#2

Bonjour Olivier,

Merci pour retour. Nous attendons donc votre correctif pour mercredi.

Terry

PS : Je comprends votre remarque. Cependant nous disposons d'une adresse mail unique pour faire du support avec nos éditeurs. Cela nous permet de centraliser les retours, notamment en cas d'absence d'un collaborateur.

Sanh LY · le 12/09/16 à 16:15
0 pt
Sanh LY · le 12/09/16 à 17:47

Autre sujet en lien avec l'authentification SAML et le module associé.

Est-il possible de modifier l'URL pointée lors de la déconnexion de la plateforme Jalios?

Idéalement nous souhaiterions que nos utilisateurs arrivent sur une page de notre SSO.

Cette page d'atterrissage peut-être elle ajoutée comme champ paramétrable dans le module SAML?

Cordialement,

#1

J'ai noté votre demande à ce sujet, pour inclusion dans la prochaine version du module.
https://issues.jalios.com/browse/SAML-9

Olivier Jaquemet · le 13/09/16 à 17:41
#2

Le module d'authentification SAML 1.1 incluant l'évolution SAML-9 est officiellement disponible au téléchargement : Module d'authentification SAML 1.2

Olivier Jaquemet · le 14/12/16 à 11:44
0 pt