================================================================================ GUIDE COMPLET : SYNCHRONISATION BOONDMANAGER VERS ACTIVE DIRECTORY AVEC N8N ================================================================================ VUE D'ENSEMBLE ============== Ce guide vous permet de creer automatiquement des utilisateurs Active Directory a partir des donnees BoondManager. Chaque nouvel utilisateur dans BoondManager sera automatiquement cree dans votre AD avec un compte active et un mot de passe. ARCHITECTURE ------------ BoondManager API → n8n (Ubuntu) → LDAP → SSH → Serveur Windows AD PREREQUIS --------- Serveur n8n (Ubuntu) : - n8n installe et fonctionnel - Acces SSH au serveur - Connexion reseau vers BoondManager et serveur AD Serveur Active Directory (Windows) : - Controleur de domaine Windows - Compte administrateur AD - SSH active (nous l'activerons ensemble) BoondManager : - API REST accessible ================================================================================ ETAPE 1 : PREPARATION DU SERVEUR WINDOWS AD ================================================================================ 1.1 ACTIVER SSH SUR WINDOWS --------------------------- Connectez-vous en RDP sur votre serveur AD Windows et ouvrez PowerShell en tant qu'administrateur : Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic' New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 1.2 CREER UN UTILISATEUR ADMINISTRATEUR POUR N8N (optionnel si vous avez déjà un compte admin sur votre serveur AD) ------------------------------------------------ Executer dans PowerShell en tant qu'administrateur : # Creer l'utilisateur admin-rfaverjon New-ADUser -Name "admin-rfaverjon" -SamAccountName "admin-rfaverjon" -UserPrincipalName "admin-rfaverjon@docaret.loc" -AccountPassword (ConvertTo-SecureString "1p36HU56" -AsPlainText -Force) -Enabled $true # Ajouter aux groupes administrateur Add-LocalGroupMember -Group "Administrators" -Member "admin-rfaverjon" Add-ADGroupMember -Identity "Domain Admins" -Members "admin-rfaverjon" 1.3 TESTER SSH -------------- Depuis votre serveur Ubuntu n8n : ssh admin-rfaverjon@10.1.1.2 Si ca fonctionne, tapez exit pour sortir. ================================================================================ ETAPE 2 : CREATION DU WORKFLOW N8N ================================================================================ 2.1 STRUCTURE DU WORKFLOW ------------------------- Votre workflow aura cette structure exacte : Schedule Trigger → HTTP Request → Split Out → Edit Fields → Code → LDAP Search → Code1 → IF → LDAP Create → SSH ↓ FALSE (rien - utilisateur existe deja) 2.2 NODE 1 : SCHEDULE TRIGGER ----------------------------- Creez un nouveau workflow et ajoutez un node "Schedule Trigger" : Mode : Every Value : 1 Unit : Hour 2.3 NODE 2 : HTTP REQUEST (BOONDMANAGER) --------------------------------------- Ajoutez un node "HTTP Request" : Method : GET URL : https://ui.boondmanager.com/api/resources?target=candidates Authentication : Generic Credential Type Generic Auth Type : Basic Auth Credential: User: utilisateur de l'api alue : mdp de l'utilisateur de l'api Specify Headers : Using Fields Below Header Parameters : Name: Accept Value: application/json 2.4 NODE 3 : SPLIT OUT ---------------------- Ajoutez un node "Split Out" : Field to Split Out : data, data[0] 2.5 NODE 4 : EDIT FIELDS ------------------------ Ajoutez un node "Edit Fields" en mode "manual" pour nettoyer/preparer les donnees. Configuration : Operation : Keep only these fields Fields to Keep : - data.attributes.firstName | String | Json avec le prenom - data.attributes.lastName | String |Json avec le nom - data.attributes.email1 | String | Json avec l'email si il y a (optionnel) 2.6 NODE 5 : CODE (PREPARATION DONNEES) --------------------------------------- Ajoutez un node "Code" avec ce contenu : // Recuperation des donnees BoondManager const firstNameRaw = $json.data.attributes.firstName || 'Test'; const lastNameRaw = $json.data.attributes.lastName || 'User'; const email = $json.data.attributes.email1 || 'test@docaret.com'; // Normalisation des noms const firstName = firstNameRaw.charAt(0).toUpperCase() + firstNameRaw.slice(1).toLowerCase(); const lastName = lastNameRaw.toUpperCase(); // Construction des identifiants const sam = `${firstName[0].toLowerCase()}.${lastName.toLowerCase()}`; const upn = `${sam}@docaret.com`; // DN vers l'OU personnalisee const dn = `CN=${firstName} ${lastName},OU=Users,OU=Docaret,DC=docaret,DC=loc`; return [{ json: { dn: dn, attrs: { objectClass: "user", cn: `${firstName} ${lastName}`, sn: lastName, givenName: firstName, sAMAccountName: sam, userPrincipalName: upn, mail: email, displayName: `${firstName} ${lastName}`, userAccountControl: "514", // Cree DESACTIVE pwdLastSet: "0" // Force le changement de mot de passe a la premiere connexion }, searchSAM: sam, password: "Docaret@" } }]; IMPORTANT : Adaptez ces valeurs a votre environnement : - OU=Users,OU=Docaret,DC=docaret,DC=loc → votre structure AD - @docaret.com → votre domaine 2.7 NODE 6 : LDAP SEARCH ------------------------ Ajoutez un node "LDAP" : Operation : Search Credential : Connection URL : ldap://10.1.1.2:636 (addresse de votre AD) Binding DN : CN=admin-rfaverjon,OU=Administration,OU=Users,OU=Docaret,DC=docaret,DC=loc (emplacement de l'utilisateur admin de l'AD) Bind Password : (MDP de l'admin) Connection : TLS Cochez la case ignore SSl/TLS issues Base DN : OU=Users,OU=Docaret,DC=docaret,DC=loc Filter : (sAMAccountName={{ $('Code').item.json.searchSAM }}) Attributes : cn Search Text : * Return All : active 2.8 NODE 7 : CODE1 (ANALYSE RESULTAT) ------------------------------------ Ajoutez un node "Code" nomme "Code1" : // Verifier si l'utilisateur existe deja const userExists = $json && $json.length > 0 ? 1 : 0; return [{ json: { userExists: userExists, ...($input.all()[0].json || {}) } }]; 2.9 NODE 8 : IF (CONDITION) --------------------------- Ajoutez un node "IF" : Value 1 : {{ $json.userExists }} Operation : Equal Value 2 : 1 2.10 NODE 9 : LDAP CREATE (BRANCHE TRUE DU IF) ---------------------------------------------- Ajoutez un node "LDAP" connecte a la sortie TRUE du IF : Operation : Add Connection URL : ldap://10.1.1.2:389 Bind DN : admin-rfaverjon@docaret.loc Bind Password : 1p36HU56 DN : {{ $json.dn }} Configuration des attributs : Attribute ID : objectClass Type : Expression Value : {{ $json.attrs.objectClass }} Attribute ID : cn Type : Expression Value : {{ $json.attrs.cn }} Attribute ID : sn Type : Expression Value : {{ $json.attrs.sn }} Attribute ID : givenName Type : Expression Value : {{ $json.attrs.givenName }} Attribute ID : sAMAccountName Type : Expression Value : {{ $json.attrs.sAMAccountName }} Attribute ID : userPrincipalName Type : Expression Value : {{ $json.attrs.userPrincipalName }} Attribute ID : displayName Type : Expression Value : {{ $json.attrs.displayName }} Attribute ID : userAccountControl Type : Expression Value : {{ $json.attrs.userAccountControl }} 2.11 NODE 10 : SSH (ACTIVATION UTILISATEUR) ------------------------------------------- Ajoutez un node "SSH" connecte a la sortie du LDAP Create : Host : 10.1.1.2 Port : 22 Username : admin-rfaverjon Password : 1p36HU56 Working Directory : C:\ Command : net user {{ $('Code').item.json.attrs.sAMAccountName }} {{ $('Code').item.json.password }} /domain /active:yes /expires:never Cette commande va : - Definir le mot de passe pour l'utilisateur - Activer le compte dans Active Directory - Configurer le mot de passe pour qu'il n'expire jamais ================================================================================ ETAPE 3 : TEST ET VALIDATION ================================================================================ 3.1 TEST DU WORKFLOW -------------------- 1. Sauvegardez votre workflow 2. Cliquez sur "Execute Workflow" pour tester manuellement 3. Verifiez les resultats dans chaque node 3.2 VERIFICATION DANS ACTIVE DIRECTORY -------------------------------------- Connectez-vous sur votre serveur AD et verifiez : Get-ADUser -Filter "sAMAccountName -like 'p.david'" -Properties * 3.3 TEST DE CONNEXION UTILISATEUR --------------------------------- Testez la connexion avec : Login : p.david (par exemple) Mot de passe : Docaret@ ================================================================================ ETAPE 4 : ACTIVATION AUTOMATIQUE ================================================================================ 4.1 ACTIVER LE WORKFLOW ----------------------- Dans n8n, activez le workflow avec le bouton "Active" pour qu'il s'execute automatiquement toutes les Heure. 4.2 SURVEILLANCE --------------- Surveillez les executions dans l'onglet "Executions" de n8n. ================================================================================ PROBLEMES RENCONTRES ET SOLUTIONS ================================================================================ PROBLEME 1 : Erreur 0x35 - WILL_NOT_PERFORM lors de la creation LDAP SYMPTOME : Problem in node 'LDAP' 0000052D: SvcErr: DSID-031A124C, problem 5003 (WILL_NOT_PERFORM), data 0 Code: 0x35 CAUSE : Active Directory refuse de creer un compte active (userAccountControl: "512") sans mot de passe. SOLUTION : - Creer le compte desactive avec userAccountControl: "514" - Activer le compte et definir le mot de passe via SSH avec net user PROBLEME 2 : Erreur unicodePwd - WILL_NOT_PERFORM SYMPTOME : Problem in node 'LDAP' 0000052D: SvcErr: DSID-031A124C, problem 5003 (WILL_NOT_PERFORM), data 0 CAUSE : L'attribut unicodePwd necessite une connexion SSL/TLS securisee vers Active Directory. SOLUTION : - Ne pas utiliser unicodePwd dans le node LDAP - Utiliser la commande net user via SSH pour definir le mot de passe PROBLEME 3 : Privileges administrateur insuffisants via SSH SYMPTOME : Les commandes PowerShell Set-ADAccountPassword echouent via SSH meme avec un utilisateur administrateur. CAUSE : L'execution via SSH ne beneficie pas automatiquement de l'elevation de privileges. SOLUTION RETENUE : Utiliser la commande native Windows "net user" qui fonctionne directement PROBLEME 4 : Formatage incoherent des noms SYMPTOME : Les noms arrivent avec des casses differentes depuis BoondManager. SOLUTION : // Normalisation des noms const firstName = firstNameRaw.charAt(0).toUpperCase() + firstNameRaw.slice(1).toLowerCase(); const lastName = lastNameRaw.toUpperCase(); PROBLEME 5 : Erreur de syntaxe JavaScript SYMPTOME : SyntaxError: Unexpected token CAUSE : Virgule manquante dans les objets JavaScript SOLUTION : Verifier la syntaxe JavaScript, notamment les virgules dans les objets. ================================================================================ COMMANDES UTILES POUR LE DEPANNAGE ================================================================================ VERIFICATIONS ACTIVE DIRECTORY ------------------------------ # Lister tous les utilisateurs dans l'OU Get-ADUser -SearchBase "OU=Users,OU=Docaret,DC=docaret,DC=loc" -Filter * # Verifier les proprietes d'un utilisateur specifique Get-ADUser -Identity "p.david" -Properties * # Verifier les groupes d'un utilisateur Get-ADUser -Identity "admin-rfaverjon" -Properties MemberOf | Select-Object -ExpandProperty MemberOf # Tester la connexion LDAP Test-NetConnection -ComputerName "10.1.1.2" -Port 389 TEST DES COMMANDES SSH ---------------------- # Test de connexion SSH ssh admin-rfaverjon@10.1.1.2 # Test de la commande net user net user p.david Docaret@ /domain /active:yes /expires:never # Verifier le statut d'un utilisateur net user p.david /domain DEBUG N8N --------- - Utiliser le mode debug dans n8n pour voir les donnees transmises entre les nodes - Verifier les logs d'execution pour identifier les erreurs - Tester chaque node individuellement - Regarder l'onglet "Executions" pour les erreurs ================================================================================ SECURITE ET BONNES PRATIQUES ================================================================================ RECOMMANDATIONS DE SECURITE --------------------------- 1. CHIFFREMENT : Utiliser LDAPS (port 636) au lieu de LDAP (port 389) en production 2. MOTS DE PASSE : Implementer une politique de mots de passe plus robuste 3. LOGGING : Activer les logs d'audit Active Directory 4. ACCES : Limiter les privileges du compte admin-rfaverjon au strict necessaire 5. CREDENTIALS : Utiliser les credentials n8n au lieu de mots de passe en dur AMELIORATIONS POSSIBLES ---------------------- 1. GESTION DES ERREURS : Ajouter des nodes de gestion d'erreur et de notification 2. VALIDATION : Verifier si l'utilisateur existe deja avant creation (deja fait) 3. GROUPES : Ajouter automatiquement l'utilisateur a des groupes specifiques 4. DOSSIER HOME : Creer automatiquement le dossier personnel de l'utilisateur 5. EMAIL DE NOTIFICATION : Envoyer les informations de connexion a l'utilisateur ================================================================================ PERSONALISATION ================================================================================ ADAPTEZ CES ELEMENTS A VOTRE ENVIRONNEMENT ------------------------------------------ Structure Active Directory : Changez dans le Code node : const dn = `CN=${firstName} ${lastName},OU=VotreOU,DC=votredomaine,DC=com`; Domaine email : Changez dans le Code node : const upn = `${sam}@votredomaine.com`; Mot de passe par defaut : Changez dans le Code node : password: "VotreMotDePasse@", Frequence de synchronisation : Changez dans le Schedule Trigger : - Toutes les heures : Value = 1, Unit = Hour - Tous les jours : Value = 1, Unit = Day Serveur AD : Changez dans tous les nodes LDAP et SSH : IP : 10.1.1.2 → votre IP Domaine : docaret.loc → votre domaine ================================================================================ RESULTAT FINAL ================================================================================ Le workflow cree permet de : - ✓ Recevoir des donnees utilisateur via API BoondManager ou webhook - ✓ Normaliser le formatage des noms (Prenom avec majuscule, NOM en majuscules) - ✓ Verifier si l'utilisateur existe deja dans AD - ✓ Creer automatiquement l'utilisateur dans Active Directory (si inexistant) - ✓ Activer le compte avec un mot de passe defini - ✓ Configurer le mot de passe pour qu'il n'expire jamais - ✓ Forcer le changement de mot de passe a la premiere connexion La solution finale utilise une approche simple et robuste avec les outils natifs Windows (net user) plutot que des solutions complexes PowerShell. ================================================================================ WORKFLOW COMPLET - RESUME DES CONNEXIONS ================================================================================ OPTION 1 : AVEC API POLLING Schedule Trigger → HTTP Request → Split Out → Edit Fields → Code → LDAP Search → Code1 → IF ↓ TRUE LDAP Create → SSH ↓ FALSE (rien - utilisateur existe deja) ================================================================================ FIN DU GUIDE ================================================================================ Ce guide complet vous permet de mettre en place une synchronisation automatique entre BoondManager et Active Directory. Suivez chaque etape dans l'ordre et adaptez les parametres a votre environnement. La solution a ete testee et validee. Elle utilise une approche robuste qui evite les problemes de privileges et de securite complexes.