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
Le client demande l'accès à une ressource protégée (sécurisée) sur l'application CARL Source.
L'application CARL Source demande au fournisseur d'identité (Identity Provider ou IdP), qui est configuré, une demande d'authentification.
Le fournisseur d'identité redirige l'utilisateur vers sa page d'authentification.
L'utilisateur saisit ses informations d'identification puis soumet le formulaire pour validation.
Le fournisseur d'identité vérifie les informations de connexion.
Si les informations de connexion sont valides, il envoie un code d'autorisation à l'application CARL Source.
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.
Une fois la demande de jeton d'accès reçue, le fournisseur d'identité vérifie le code et les informations d'identification.
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.
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.
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 :
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 :
- default.user.organization
- default.user.department
- default.user.language
- default.user.business
- default.user.timeZoneId
- default.user.MRAddressee
- default.user.mobility
- default.user.external
- default.user.supervisor
- default.user.site
- default.user.profile
- default.user.customGroup
- default.user.groupTech
- default.user.groupSite
- default.user.currencyCode
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)} attributesToEvaluate=user.login, user.code, user.fullName |
|
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
| 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.