CARL Source
Configuration du système [Fédération d'identité]
Personnalisation > Fonctions de personnalisation > Configuration du système > Configuration du système : Formulaires > Configuration du système [Fédération d'identité]

L'utilisation de cette fonctionnalité nécessite l'acquisition de droits complémentaires.

En savoir plus sur l'option "Fédération d'identité (LDAP, SSO)".

Cet onglet joue un rôle dans la configuration du système : il vous permet de renseigner les paramètres relatifs à la mise en place de la fédération d'identité pour une connexion via OpenID Connect.

La fédération d'identité est un concept permettant de partager facilement des informations sur un utilisateur entre différentes plateformes. Cela permet à l'utilisateur de naviguer entre différents services en ne s'authentifiant qu'une seule fois.
Ce mécanisme est mis en œuvre au sein d'une architecture SSO (Single Sign-On) et utilise un protocole normalisé tel que OpenID Connect.
L'environnement CARL Source utilise le protocole OpenID Connect (OIDC).

 

Principe de base

 

  1. Le client demande l'accès à une ressource protégée (sécurisée) sur l'application CARL Source.

  2. L'application CARL Source demande au fournisseur d'identité (Identity Provider ou IdP), qui est configuré, une demande d'authentification.

  3. Le fournisseur d'identité redirige l'utilisateur vers sa page d'authentification.

  4. L'utilisateur saisit ses informations d'identification puis soumet le formulaire pour validation.

  5. Le fournisseur d'identité vérifie les informations de connexion.

  6. Si les informations de connexion sont valides, il envoie un code d'autorisation à l'application CARL Source.

  7. Une fois le code d'autorisation reçu, l'application CARL Source demande un jeton d'accès auprès du fournisseur d'identité, en transmettant le code d'autorisation ainsi que des informations d'identification.

  8. Une fois la demande de jeton d'accès reçue, le fournisseur d'identité vérifie le code et les informations d'identification.

  9. Si le code et les informations d'identification sont valides, le fournisseur d'identité envoie un jeton d'identification, un jeton d'accès et éventuellement un jeton de rafraîchissement à l'application CARL Source.

  10. Une fois les jetons d'accès reçus, l'application CARL Source vérifie le jeton d'identification et connecte l'utilisateur correspondant si tout se déroule correctement.

  11. Si l'utilisateur a pu être connecté, le client accède à la ressource protégée qu'il a demandé, uniquement s'il est autorisé à y accéder.

Une fois authentifié, le client peut accéder aux ressources protégées sans devoir se réauthentifier tant que sa session est active sur l'application CARL Source.

 

Configuration dans CARL Source

Exemple de Mapping
Copier le code
##################################################################################################
# Mapping des attributs de l'utilisateur par rapport aux attributs dans l'entête HTTP.
#
# Pour les attributs suivants, on précise (à gauche) l'attribut de l'utilisateur et (à droite)
# l'attribut correspondant dans l'entête HTTP qui fournit la valeur.
# Si l'attribut dans l'entête n'est pas précisé, l'attribut de l'utilisateur sera laissé vide.
##################################################################################################
##################################################################################################
# Clé contrôle validant l'origine du déclenchement de la connexion et du provisioning
# attribute : l'attribut de l'entête contenant la passphrase à contrôler (pas de contrôle si nulle)
# value : valeur de la passphrase valide
##################################################################################################
passphrase.attribute=
passphrase.value=
##################################################################################################
# Mapping du login permettant la recherche de l'utilisateur (qui sera créé ou mis à jour)
# avec lequel la connexion à CARL Source sera effectuée 
# Non modifiable - obligatoirement celui du SSO de la configuration système (loginParameterName)
##################################################################################################
user.login=
##################################################################################################user.code=myuserid
user.fullName=displayname
user.organization=
user.job=
user.department=
user.language=
user.timeZoneId=
user.address1=
user.address2=
user.address3=
user.zipCode=
user.city=
user.state=
user.country=
user.phone=
user.mobile=
user.fax=
user.mail=email
user.MRAddressee=
user.mobility=
user.external=
user.supervisor=
user.site=
user.profile=
user.customGroup=
user.groupTech=
user.groupSite=
################################################################################
# Valeur par défaut
################################################################################
default.user.site=
default.user.profile=CARL
default.user.customGroup=
default.user.groupTech=
default.user.groupSite =
default.user.business=DEFAULT
default.user.language=fr_FR
default.user.MRAddressee=false
################################################################################
# Attributs à exclure lors de la mise à jour des utilisateurs.
# Les attributs doivent être séparé par des virgules.
# le user.login est user.code sont systématiquement exclus
# On ne tient pas compte de cette liste pour la création des utilisateurs.
# Exemple : excludeForUpdate=user.login,user.code,user.site,user.profile
################################################################################
excludeForUpdate=user.login,user.code

Cet onglet de Fédération d'identité permet de configurer les relations à utiliser entre les revendications (claims) fournies par le fournisseur d'identité (IdP) et les attributs de l'utilisateur qui se connecte. Les noms des attributs déclarés à gauche avant le caractère '=' correspondent aux noms des attributs d'un utilisateur CARL Source.

Composition de l'écran de mapping entre les attributs de CARL Source et les noms des revendications (claims)

L'écran est composé de quatre parties distinctes :

Les revendications (claims) présentes dans le jeton d'identification sont définies dans la fiche d’un utilisateur au sein du fournisseur d’identité.

1ère partie : Définition des attributs d'un utilisateur pour lesquels un mapping est possible

 

2ème partie : Définition de valeurs par défaut pour les attributs d'un utilisateur

La définition des valeurs par défaut consiste à définir une clé composée du nom de l'attribut de l’utilisateur suffixé par "default.", qu’on associe à une valeur.

Exemple pour l'attribut code de superviseur : default.user.supervisor=ADMIN

Pour un attribut d’un utilisateur : en cas d’absence de mapping ou de valeur associée, si une valeur par défaut est définie pour l'attribut correspondant, alors l'attribut de l’utilisateur pourra être valorisé avec cette valeur lors d’une création et lors d’une modification d’un utilisateur (uniquement si l'attribut n’a pas été exclu lors de la mise à jour).

Liste des attributs d'un utilisateur pour lesquels il est possible de définir une valeur par défaut :

 

3ème partie : Définition des attributs d'un utilisateur à exclure lors d'une mise à jour

Le nom de la clé à utiliser est "excludeForUpdate" et son éventuelle valeur est composée de [zéro] ou plusieurs noms d'attribut d’un utilisateur CARL Source, séparés entre eux par une virgule.

Exemple d'exclusions : excludeForUpdate=user.code, user.profile

Si l'on se connecte à l’application CARL Source depuis un fournisseur d’identité avec un utilisateur dont l'identifiant correspond à un utilisateur existant en base de données, alors lors de la mise à jour de l’utilisateur, les propriétés définies pour la clé "excludeForUpdate" seront exclues de la mise à jour.

 

4ème partie : Définition des attributs d'un utilisateur pour lesquels on souhaite évaluer une expression

L'évaluation d'expressions pour des attributs d'un utilisateur repose sur le langage d'expression "Expression Language 3". Les attributs d'un utilisateur sont considérés comme des expressions à évaluer dès lors que l'on associe à la clé de mapping "attributesToEvaluate" les noms des attributs d’un utilisateur CARL Source séparés entre eux par une virgule.

Exemple de définitions :
  Ici on souhaite pouvoir évaluer les expressions de deux attributs "user.code" et "user.fullName".

Exemple de déclarations
Copier le code

 user.code=${cs:left(given_name, 1)+=cs:left(family_name, 19)}
 user.fullName=${cs:left(given_name+= ' ' +=family_name, 255)}

 attributesToEvaluate=user.login, user.code, user.fullName

Les valeurs des revendications (“claims”) utilisées dans les expressions ne peuvent pas être elles-mêmes des expressions.

 

Cas d'un nom d'utilisateur auto-généré

Il est possible de définir le mapping de l’attribut "user.code" comme une expression à évaluer utilisant un code utilisateur auto-généré.


La variable qui permettra d’utiliser le code utilisateur auto-généré dans une expression à évaluer correspond à "carl_user.autocode" et sera disponible uniquement lors du mapping de l'attribut "user.code" en création d’un utilisateur, et uniquement si une séquence est configurée pour l'entité "USER".
 
 Pour ce faire, il faut :
 - Ouvrir le formulaire 
Codification automatique
 - Renseigner une nouvelle codification automatique (si non existante) pour l'entité "USER" en définissant par exemple la valeur actuelle du compteur de séquence (colonne "SÉQUENCE") et une longueur de séquence (colonne "LONGUEUR SÉQUENCE")
 - Valider
 - Revenir sur l'onglet de configuration du mapping de la fédération d’identité
 - Définir l'attribut "user.code" comme étant à évaluer (exemple :  attributesToEvaluate=user.code)
 - Définir l'attribut "user.code" comme étant exclu des mises à jour (exemple : excludeForUpdate=user.code)
 - Utiliser le code auto-généré "carl_user.autocode" uniquement dans le mapping de l'attribut "user.code"

 

  Exemple de mapping pour l'attribut "user.code" utilisant à la fois des noms de revendications et un code utilisateur auto-généré :

Example Title
Copier le code
user.code=${cs:left(given_name, 1)+=cs:left(family_name, 3)+='_'+=carl_user.autocode} . 

Ici, l’expression à évaluer pour l'attribut "user.code" correspond à la concaténation du premier caractère de la revendication "given_name" avec les trois premiers caractères de la revendication "family_name" suivis du caractère '_' puis suivis d’une séquence correspondant au code auto-généré.

 

Fonctions personnalisées à disposition pour l'évaluation d’expressions

 Lors de l'utilisation de ces fonctions dans les expressions à évaluer, les appels à ces fonctions devront être préfixés par "cs:" (exemple : ${cs:left(given_name, 1)}).

 

Exemple de mapping
Copier le code
######################################################################################################################
    # Mapping des attributs de l'utilisateur par rapport aux attributs dans les revendications ("claims") de la partie
    # "payload" d'un jeton d'identification au format JWT.
    ######################################################################################################################
    ######################################################################################################################
    # Pour les attributs suivants, on précise (à gauche) l'attribut de l'utilisateur et (à droite) l'attribut
    # correspondant dans les revendications (claims) présentes dans un jeton d'identification au format JWT.
    # Si l'attribut dans les revendications n'est pas précisé alors, l'attribut de l'utilisateur sera laissé vide.
    ######################################################################################################################

    ######################################################################################################################
    # Mapping du login permettant la recherche de l'utilisateur (qui sera créé ou mis à jour)
    # avec lequel la connexion à CARL Source sera effectuée
    ######################################################################################################################
    user.login=preferred_username
    ######################################################################################################################
    user.code=${cs:left(given_name,1)+=cs:left(family_name,3)+='_'+=carl_user.autocode}
    user.fullName=${cs:left(given_name+= ' ' +=family_name, 255)}
    user.organization=organization
    user.job=job
    user.department=department
    user.language=locale
    user.business=business
    user.timeZoneId=zoneinfo
    user.address1=addressLine1
    user.address2=addressLine2
    user.address3=addressLine3
    user.zipCode=address.postal_code
    user.city=address.locality
    user.state=address.region
    user.country=address.country

    user.phone=phone_number
    user.mobile=mobile_number
    user.fax= fax_number
    user.mail=email

    user.MRAddressee=MRAddressee
    user.mobility= mobility
    user.external=external

    user.supervisor=supervisorCode
    user.site=siteCode
    user.profile=profileCode
    user.customGroup=customGroupCode
    user.groupTech=groupTechCode
    user.groupSite=groupSiteCode

    user.currencyCode=currencyCode
    ######################################################################################################################
    # Définition des valeurs par défaut
    ######################################################################################################################
    default.user.organization=
    default.user.department=
    default.user.language=fr_FR
    default.user.business=DEFAULT
    default.user.timeZoneId=Europe/Paris
    default.user.supervisor=
    default.user.site=
    default.user.profile=CARL
    default.user.customGroup=
    default.user.groupTech=
    default.user.groupSite=
    default.user.MRAddressee=
    default.user.mobility=
    default.user.external=
    default.user.currencyCode=EUR
    ######################################################################################################################
    # Définition des attributs à exclure lors de la mise à jour des utilisateurs.
    # Les attributs doivent être séparés par des virgules.
    # l'attribut "user.login" est systématiquement exclu
    # On ne tient pas compte de cette liste pour la création des utilisateurs.
    #
    # Exemple : excludeForUpdate=user.login,user.code,user.site,user.profile
    ######################################################################################################################
    excludeForUpdate=user.login, user.code, user.profile
    ######################################################################################################################
    # Définition des attributs pour lesquels on souhaite évaluer une expression.
    # Les attributs doivent être séparés par des virgules.
    #
    # Exemple : attributesToEvaluate=user.code
    ######################################################################################################################
    attributesToEvaluate=user.code, user.fullName
    ######################################################################################################################

 

 

Pour toute information complémentaire concernant la mise en place de la fédération d'identité, prendre contact avec le support technique de CARL Berger-Levrault.