Créer un compte technique OAuth2 dans IFS Cloud paraît simple : un Client ID, un Client Secret, quelques Permission Sets et le tour est joué. En pratique, dès que ce compte doit accéder à des données HCM, plusieurs couches d’identité se superposent : IAM Client, Service Account, IFS Service User et Person. Après un rafraîchissement de notre environnement UAT, cette chaîne était devenue incohérente et IFS refusait le compte avant même d’évaluer ses permissions. Voici la configuration qui a finalement fonctionné dans mon environnement IFS Cloud 25R2.

4 objets distincts IAM Client, Service Account, IFS Service User et Person.
1 liaison critique Le Directory ID relie l’identité IAM à l’utilisateur applicatif IFS.
5 couches d’accès OAuth2, utilisateur IFS, sociétés, Permission Sets et périmètre HCM.
1 erreur trompeuse Login.FUSRNULL ressemble à une permission manquante, mais le problème est plus en amont.

Un retour d’expérience, pas une règle universelle

Cet article décrit une configuration réellement utilisée dans un environnement IFS Cloud 25R2. Les libellés d’écran, les chemins de navigation et les mécanismes HCM peuvent varier selon la version, les composants installés, les rôles administratifs et les personnalisations. La présence d’une Person n’est pas obligatoire pour toutes les intégrations : elle est devenue nécessaire dans mon cas parce que le compte devait être autorisé sur un périmètre de données HCM.

01Le vrai problème : plusieurs chaînes d’identité

Mon besoin était pourtant classique : créer un compte technique utilisable par un middleware, obtenir un Client ID et un Client Secret, demander un token avec le flux OAuth2 Client Credentials, puis appeler les API REST IFS nécessaires au module HCM.

Le piège est de croire qu’un seul objet « compte API » porte toutes ces responsabilités. IFS sépare en réalité plusieurs niveaux :

Application externe
        │
        ▼
IAM Client
        │
        ▼
Service Account IAM
        │
        ▼
IFS Service User
        │
        ├── Companies
        ├── Permission Sets
        │
        ▼
Person
        │
        ▼
Périmètre de données HCM

Chaque couche répond à une question différente :

  • Qui demande le token ? L’IAM Client.
  • Quelle identité technique porte le token ? Le Service Account IAM.
  • Quel utilisateur IFS exécute les appels ? L’IFS Service User.
  • Quelles fonctions et projections sont autorisées ? Les Permission Sets.
  • Quelles sociétés et quelles données RH sont visibles ? Les accès société et le périmètre HCM associé à la Person.

La phrase à retenir

IAM Client ≠ Service Account ≠ IFS Service User ≠ Person. Ils peuvent partager des noms proches, mais ce ne sont ni le même objet ni le même niveau d’autorisation.

02Pourquoi le rafraîchissement UAT a compliqué la situation

Dans mon cas, le problème est apparu après un rafraîchissement de l’environnement UAT à partir de la production. Le compte API existait auparavant en UAT, mais pas dans la production ayant servi de source au clonage.

Après le refresh, certaines briques existaient toujours ou avaient été partiellement recréées, alors que les liaisons entre IAM et les utilisateurs IFS n’étaient plus cohérentes.

IAM Client présent
+
Utilisateur IFS présent ou recréé partiellement
+
Directory ID absent, incorrect ou associé au mauvais objet
=
token ou connexion applicative impossible

L’API renvoyait notamment une erreur encapsulée sous un code générique de type DB_ACCESS_ERROR, avec le détail suivant :

ORA-20105: Login.FUSRNULL:
The directory id SERVICE-ACCOUNT-... is not allowed to run the application.

Le premier réflexe est souvent d’ajouter des Permission Sets. Dans ce cas précis, cela ne sert à rien : IFS n’est pas encore arrivé à l’évaluation des permissions fonctionnelles. Il ne parvient pas à résoudre correctement l’identité IAM vers l’utilisateur applicatif IFS.

Ne vous laissez pas tromper par le message principal

Le libellé global peut donner l’impression d’un problème de base de données ou d’autorisation. Le détail Login.FUSRNULL indique surtout qu’il faut commencer par la chaîne d’identité : Service Account User, Directory ID et IFS Service User.

03Les quatre objets à distinguer

Objet Rôle Ce qu’il ne remplace pas
IAM Client Représente l’application externe qui demande un token OAuth2. Il ne porte pas à lui seul les sociétés, les Permission Sets et le périmètre HCM.
Service Account IAM Identité technique créée lorsque les Service Accounts sont activés sur le client. Il ne remplace pas l’utilisateur applicatif visible dans l’écran Users.
IFS Service User Utilisateur applicatif sur lequel sont attribués les Permission Sets, les sociétés et les autorisations IFS. Il ne fournit pas automatiquement un Client ID et un Client Secret.
Person Objet Person utilisé par certains contrôles de données et d’organisation HCM. Elle ne remplace ni l’utilisateur IFS ni ses Permission Sets.

04Le piège des deux assistants de création

IFS propose deux chemins de création qui semblent chacun presque suffisants.

Chemin A : partir de Users

Depuis l’écran des utilisateurs IFS, il est possible de créer un utilisateur de type Service User et de lui associer une Person. C’est très pratique pour HCM, mais cela ne crée pas automatiquement l’IAM Client, le Client ID et le Client Secret.

Chemin B : laisser IAM créer l’utilisateur

Depuis les IAM Clients, l’option de création automatique peut générer le Service User associé. C’est pratique pour de nombreuses intégrations classiques, mais dans mon environnement l’utilisateur généré ne disposait pas de la Person nécessaire au périmètre HCM.

Création depuis Users
→ IFS Service User + Person
→ pas de Client ID / Client Secret

Création automatique depuis IAM Client
→ IAM Client + Service Account + IFS Service User
→ pas de Person dans mon cas

La méthode retenue consiste donc à séparer volontairement les deux opérations :

La méthode qui a fonctionné

Créer d’abord l’IAM Client sans création automatique du Service User, récupérer la valeur exacte du Service Account User, puis créer manuellement l’IFS Service User avec sa Person. La liaison est réalisée par le Directory ID.

05L’architecture cible qui fonctionne

IAM Client : IFS_BLUEWAY
        │
        ├── Client ID
        ├── Client Secret
        └── Service Accounts = Yes
        │
        ▼
Service Account IAM
service-account-ifs_blueway
        │
        │ valeur copiée dans Directory ID
        ▼
IFS Service User : IFS_BLUEWAY
        │
        ├── User Type = Service User
        ├── Companies
        ├── Permission Sets
        └── Create Person = Yes
        │
        ▼
Person : IFS_BLUEWAY
        │
        ▼
HCM Organization Access

Copier la valeur exacte

Ne reconstruisez pas le Directory ID à partir du nom du client. Copiez la valeur réellement créée par IAM, sans modifier les tirets, le préfixe ou la casse affichée par votre environnement.

06Étape 1 : créer l’IAM Client

Dans IFS Cloud 25R2, ouvrez :

Solution Manager
→ Users and Permissions
→ Identity and Access Manager
→ IAM Clients

Créez un client dédié à l’intégration, par exemple :

IFS_BLUEWAY

Pour un scénario serveur à serveur, la configuration utilisée dans mon cas est la suivante :

Paramètre de l’interface Valeur Pourquoi
Enabled Yes Le client doit être actif.
Public Client No Le middleware est un client confidentiel capable de protéger un secret.
Service Accounts Yes Active l’identité technique utilisée avec Client Credentials.
Create IFS Service User No Permet de créer ensuite manuellement le Service User avec une Person.

IFS crée alors une identité de compte de service ressemblant à :

service-account-ifs_blueway

Conservez trois informations : le Client ID, le Client Secret et la valeur exacte du Service Account User.

Le Client Secret est un secret de production

Ne l’insérez pas dans une capture d’écran, un ticket, un log, un fichier de configuration versionné ou une collection Postman partagée. Stockez-le dans un coffre de secrets ou dans le mécanisme sécurisé prévu par votre middleware.

07Étape 2 : créer le Service User IFS et sa Person

Ouvrez ensuite :

Solution Manager
→ Users and Permissions
→ Users

Créez manuellement l’utilisateur technique. Exemple :

Identity      : IFS_BLUEWAY
User Type     : Service User
Directory ID  : service-account-ifs_blueway
Create Person : Yes

Le champ essentiel est Directory ID. Il doit contenir la valeur exacte du Service Account User créé par l’IAM Client.

Le nom de l’Identity IFS peut rester lisible pour les administrateurs, mais c’est le Directory ID qui réalise la liaison technique :

Token OAuth2
     │
     ▼
Service Account IAM
     │
     │ résolution par Directory ID
     ▼
IFS Service User
     │
     ▼
Permissions et données autorisées

Vérifiez également que l’utilisateur est actif, qu’il est autorisé à exécuter l’application et que le type est bien Service User.

08Pourquoi HCM peut nécessiter une Person

Un middleware n’est évidemment pas une personne physique. Pourtant, dans IFS, certains mécanismes d’autorisation HCM s’appuient sur l’objet Person et sur son rattachement au périmètre organisationnel.

Il faut donc distinguer deux contrôles :

Contrôle Question à laquelle il répond Exemple
Permission fonctionnelle Que peut appeler cet utilisateur ? Accès à une projection REST ou à une fonction IFS.
Autorisation sur les données HCM Sur quelles données peut-il agir ou lire ? Périmètre d’organisation, employés ou unités accessibles.

Un compte peut donc posséder les Permission Sets nécessaires et continuer à recevoir une erreur ou un résultat vide sur certaines données HCM si la Person associée n’a pas le bon périmètre.

09Étape 3 : attribuer les sociétés

Selon la configuration, l’accès société se gère notamment depuis :

Accounting Rules
→ User Related Data
→ Users per Company

Ajoutez le compte technique à chaque société dont le middleware doit lire ou traiter les données. Ne donnez pas automatiquement toutes les sociétés : conservez le principe du moindre privilège.

10Étape 4 : attribuer les Permission Sets

Attribuez ensuite les Permission Sets nécessaires aux projections REST et aux fonctions réellement utilisées par le middleware.

Permission Set ne signifie pas accès illimité à HCM

Les Permission Sets ouvrent les fonctions et les projections. Les contrôles HCM peuvent encore filtrer les données selon la Person, l’organisation, la société et le contexte métier.

Pour diagnostiquer proprement, commencez par le jeu minimal de Permission Sets nécessaire à une projection de test, puis ajoutez les droits par fonctionnalité. Attribuer immédiatement un profil très large masque le problème et augmente le risque de sécurité.

11Étape 5 : attribuer le périmètre HCM

La structure organisationnelle est accessible notamment depuis :

Human Capital Management
→ HCM Services
→ Organization Management
→ Graphical Organization Structure

Contrôlez le périmètre auquel la Person du compte technique doit accéder. Le bon réglage dépend du besoin : toute l’organisation, certaines unités ou un périmètre plus restreint.

La chaîne complète devient alors :

IAM Client
     │
     ▼
Service Account IAM
     │
     ▼
IFS Service User
     ├── Companies
     ├── Permission Sets
     │
     ▼
Person
     │
     ▼
HCM Organization Access

12Tester OAuth2 et l’API par couches

Une fois la configuration terminée, le middleware peut utiliser le flux OAuth2 Client Credentials.

Client ID + Client Secret
          │
          ▼
Endpoint OAuth2 IFS
          │
          ▼
Access Token
          │
          ▼
Authorization: Bearer <token>
          │
          ▼
Projection REST IFS

Pour éviter de mélanger plusieurs problèmes, testez dans cet ordre :

  1. Obtenir un token avec le Client ID et le Client Secret.
  2. Appeler une projection simple nécessitant peu de droits.
  3. Tester l’accès société sur une donnée non HCM.
  4. Tester la projection HCM cible.
  5. Comparer le résultat attendu avec le périmètre de la Person.

Exemple générique à adapter avec l’endpoint OAuth2 réel de votre environnement :

curl -X POST "<IFS_TOKEN_ENDPOINT>" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=<CLIENT_ID>" \
  -d "client_secret=<CLIENT_SECRET>"

Ne journalisez pas la commande complète

Dans un script d’exploitation, le secret doit provenir d’une variable protégée ou d’un coffre. Évitez également qu’il apparaisse dans l’historique du shell.

13Grille de diagnostic des erreurs

La grille suivante est une méthode pratique de diagnostic, pas une table officielle exhaustive des erreurs IFS.

Symptôme Couche à vérifier en premier Contrôles utiles
Le token n’est pas délivré IAM Client et OAuth2 Client actif, secret valide, grant autorisé, endpoint et environnement corrects.
Login.FUSRNULL ou Directory ID non autorisé Liaison IAM vers IFS User Service Account User exact, Directory ID, utilisateur actif, type Service User, doublons.
Token valide mais réponse 401/403 sur une projection Permission Sets et projection Droits de la projection, utilisateur IFS ciblé, activation du Permission Set.
L’API répond mais certaines sociétés sont absentes Users per Company Sociétés affectées au compte et contexte de société attendu.
L’API HCM répond avec peu ou pas de données Person et périmètre HCM Person créée, lien utilisateur-Person, organisation et autorisations HCM.
Le compte fonctionnait avant un refresh Cohérence inter-environnements IAM Client, Service Account User, Directory ID, secret, Person et droits recréés.

L’erreur FUSRNULL : la vérification prioritaire

Service Account User IAM
            =
Directory ID du Service User IFS

Puis contrôlez :

  • Le Service User est actif.
  • Son type est bien Service User.
  • La connexion à l’application IFS est autorisée.
  • Le Directory ID correspond exactement à l’identité IAM.
  • Aucun autre utilisateur ne possède le même Directory ID.
  • Le test est réalisé dans le bon environnement avec le bon Client ID.

14Checklist après un clonage d’environnement

Après un clonage de PROD vers UAT, un refresh de TEST ou toute opération de remplacement d’environnement, l’existence visuelle d’un utilisateur ne garantit pas la cohérence de toute sa chaîne d’identité.

  • IAM Client : existe-t-il dans l’environnement cible et est-il actif ?
  • Client ID : le middleware utilise-t-il celui de l’environnement cible ?
  • Client Secret : est-il toujours valide et stocké au bon endroit ?
  • Service Account User : quelle valeur exacte IAM a-t-il créée ?
  • IFS Service User : existe-t-il, est-il actif et du bon type ?
  • Directory ID : correspond-il exactement au Service Account User ?
  • Person : existe-t-elle et est-elle liée au bon utilisateur ?
  • Companies : les sociétés nécessaires sont-elles attribuées ?
  • Permission Sets : les projections cibles sont-elles autorisées ?
  • HCM Access : le périmètre organisationnel est-il toujours présent ?

Une checklist à automatiser autant que possible

Pour les intégrations critiques, conservez un dossier d’exploitation par environnement avec les noms des objets, les tests de santé, les projections utilisées et la procédure de recréation. Le secret lui-même ne doit évidemment pas être documenté en clair.

15Sécurité et exploitation du compte technique

Quelques bonnes pratiques générales complètent la configuration :

  • Un client par intégration et par environnement : évitez de partager le même Client ID entre plusieurs middlewares ou entre PROD et UAT.
  • Moindre privilège : attribuez uniquement les sociétés, projections et périmètres HCM nécessaires.
  • Rotation du secret : documentez la procédure de renouvellement et la mise à jour du middleware.
  • Traçabilité : utilisez un nom technique identifiable dans les logs et les audits.
  • Tests de santé : vérifiez régulièrement le token puis une projection non destructive.
  • Aucune connexion interactive : un Service User destiné à l’intégration ne doit pas devenir un compte humain générique.
  • Révocation maîtrisée : sachez quel flux sera impacté avant de désactiver le client ou le Service User.

Un compte HCM est particulièrement sensible

Les données RH peuvent contenir des informations personnelles et confidentielles. Un compte technique disposant de droits HCM doit être surveillé, limité aux données nécessaires et utilisé uniquement par le middleware prévu.

16Configuration finale et checklist rapide

La configuration fonctionnelle obtenue dans mon environnement ressemble à ceci :

IAM Client : IFS_BLUEWAY
     ├── Enabled = Yes
     ├── Public Client = No
     ├── Service Accounts = Yes
     ├── Create IFS Service User = No
     ├── Client ID
     └── Client Secret
             │
             ▼
Service Account User IAM
service-account-ifs_blueway
             │
             │ Directory ID
             ▼
IFS Service User : IFS_BLUEWAY
     ├── User Type = Service User
     ├── Active
     ├── Companies
     ├── Permission Sets
     └── Person créée
             │
             ▼
Person : IFS_BLUEWAY
     └── Autorisations HCM

La séquence de création à retenir :

1. Créer l’IAM Client.
2. Activer Service Accounts.
3. Ne pas demander la création automatique du Service User.
4. Copier la valeur exacte du Service Account User.
5. Créer manuellement l’IFS Service User.
6. Utiliser le Service Account User comme Directory ID.
7. Créer la Person associée.
8. Attribuer les sociétés.
9. Attribuer les Permission Sets.
10. Attribuer le périmètre HCM.
11. Tester le token puis les API par couches.

À retenir

  • Un IAM Client, un Service Account IAM, un IFS Service User et une Person sont des objets différents.
  • Le Directory ID est la liaison critique entre l’identité IAM et l’utilisateur applicatif IFS.
  • Dans ce cas HCM, il faut créer l’IAM Client et le Service User manuellement en deux opérations.
  • L’option Create IFS Service User doit rester à No pour pouvoir créer ensuite la Person.
  • Les Permission Sets autorisent les fonctions ; ils ne garantissent pas à eux seuls l’accès aux données HCM.
  • L’erreur Login.FUSRNULL doit d’abord orienter vers le Directory ID et la résolution de l’utilisateur.
  • Après un clonage d’environnement, toute la chaîne IAM → IFS User → Person doit être revérifiée.
  • Le Client Secret doit être protégé comme un mot de passe et séparé par environnement.

Cadre de l’article

Cet article est un retour d’expérience technique réalisé sur IFS Cloud 25R2. Il ne constitue pas une documentation officielle IFS. Les écrans, options et règles d’autorisation peuvent évoluer ou différer selon votre installation.

Les noms IFS_BLUEWAY, service-account-ifs_blueway, les Client ID et les endpoints sont des exemples. N’insérez jamais de véritable Client Secret dans un article, un dépôt Git, un ticket ou une capture d’écran.