Form to Wipe — Déploiement n8n
Ce guide couvre l'implémentation n8n de Form to Wipe. Il utilise une commande slash Slack pour ouvrir une modal, achemine la demande à un approbateur via Slack DM, et envoie les commandes d'effacement via la Jamf Platform API. Les approbateurs peuvent provenir de Microsoft Entra, Okta ou d'un groupe d'utilisateurs Slack.
Prérequis
- n8n auto-hébergé (≥ 1.30) ou n8n Cloud
- Application Slack avec les périmètres requis (voir Étape 2 ci-dessous)
- Client OAuth2 de l'API Jamf Platform avec privilèges d'effacement (voir Form to Wipe)
- L'un des suivants : enregistrement d'application Microsoft Entra, jeton API Okta, ou groupe d'utilisateurs Slack pour les approbateurs
Étape 1 — Importer le workflow
Dans n8n : Workflows → Import from file → sélectionnez Jamf-FTW-n8n-template.json.
Le workflow s'importe comme inactif. N'activez pas encore — complétez d'abord la configuration des accréditations et des variables.
Étape 2 — Accréditations
Créez les accréditations suivantes dans Settings → Credentials avant de câbler le workflow.
Slack Auth Token
Créez une application Slack à api.slack.com/apps
Ajoutez les Bot Token Scopes suivants sous OAuth & Permissions :
Périmètre Objectif commandsRecevoir les commandes slash chat:writeEnvoyer des DM et des messages de canal chat:deleteNettoyer les messages d'approbation après une décision users:readRechercher les utilisateurs par ID users:read.emailRechercher les utilisateurs par email (chemins Okta/Entra) usergroups:readLire l'appartenance au groupe d'utilisateurs Slack views:openOuvrir des modales views:updateMettre à jour les modales en cas d'erreur de validation Installez l'application dans votre espace de travail et copiez le Bot User OAuth Token
Dans n8n : créez une nouvelle accréditation HTTP Bearer Auth, collez le jeton, nommez-la
Slack Auth Token
Jamf Platform API
Dans Jamf Pro : Settings → API roles and clients → API Clients → New
Attribuez un rôle avec les privilèges listés dans Form to Wipe
Remarque sur les groupes d'ordinateurs statiques : La Platform API n'a pas de point de terminaison d'appartenance au groupe d'ordinateurs statique natif. Le workflow revient au proxy de l'API classique (
/api/proclassic/...), qui est couvert par le même privilègeRead Computer Groups.Générez un secret client et notez l'ID client et le Secret
Dans n8n : créez une nouvelle accréditation OAuth2 API :
- Type d'octroi :
Client Credentials - Token URL :
https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token - Client ID / Secret : de ce qui précède
- Type d'octroi :
Nommez-la
Jamf Platform API
Accès à la passerelle API : Le workflow appelle également la passerelle de l'API Jamf Platform (
apigw.jamf.com). Contactez votre représentant Jamf si vous n'avez pas accès.
Okta API — uniquement si IDP_PROVIDER = okta
- Dans Okta : Security → API → Tokens → Create Token
- Dans n8n : créez une nouvelle accréditation Okta API avec votre domaine Okta et le jeton
- Nommez-la
Okta account
Microsoft Entra — uniquement si IDP_PROVIDER = entra
- Dans Azure : App registrations → New registration
- Ajoutez la permission d'API :
GroupMember.Read.All(type Application) et accordez le consentement administrateur - Créez un secret client
- Dans n8n : créez une nouvelle accréditation Microsoft Entra OAuth2
- Nommez-la
Microsoft Entra ID (Azure Active Directory) account
Étape 3 — Variables
Créez chaque variable dans n8n sous Settings → Variables.
Variables requises
| Variable | Description | Exemple |
|---|---|---|
JAMF_TENANT_NAMES |
Noms d'affichage séparés par des virgules pour vos tenants Jamf | Production,Staging |
JAMF_TENANT_IDS |
UUID de tenants séparés par des virgules — même ordre que les noms | aaaaaaaa-...,bbbbbbbb-... |
APPROVER_SOURCE |
Où extraire la liste des approbateurs : scim, idp, ou dev |
idp |
IDP_PROVIDER |
Requis si APPROVER_SOURCE=idp : entra ou okta |
entra |
APPROVAL_TIMEOUT_SECONDS |
Combien de temps avant l'expiration de la demande | 3600 |
AUDIT_LOG_CHANNEL_ID |
ID du canal Slack pour tous les événements d'audit | C0123456789 |
WEBHOOK_VERIFY_TOKEN |
Un UUID ou un secret aléatoire — également défini dans l'URL de commande slash Slack | your-secret-uuid |
Variables par source d'approbateur
Si APPROVER_SOURCE = scim (groupe d'utilisateurs Slack) :
| Variable | Valeur |
|---|---|
APPROVER_USERGROUP_ID |
ID du groupe d'utilisateurs Slack — format : S0XXXXXXXX |
Si APPROVER_SOURCE = idp + IDP_PROVIDER = okta :
| Variable | Valeur |
|---|---|
IDP_OKTA_GROUP_ID |
ID du groupe Okta — format : 00gXXXXXX |
IDP_OKTA_SLACK_EMAIL_FIELD |
Champ de profil à utiliser pour la recherche d'e-mail Slack (généralement email) |
Si APPROVER_SOURCE = idp + IDP_PROVIDER = entra :
| Variable | Valeur |
|---|---|
ENTRA_APPROVER_GROUP_ID |
ID d'objet Azure AD du groupe d'approbateurs |
Si APPROVER_SOURCE = dev (autre groupe d'utilisateurs Slack, pour les tests) :
| Variable | Valeur |
|---|---|
DEV_APPROVER_USERGROUP_ID |
ID du groupe d'utilisateurs Slack pour les approbateurs de dev/test |
Configuration multi-tenant
Les variables JAMF_TENANT_NAMES et JAMF_TENANT_IDS doivent être dans le même ordre — l'index 0 des noms correspond à l'index 0 des ID. La liste déroulante de tenants dans la modal Slack est construite dynamiquement lors de l'exécution à partir de ces variables ; aucune configuration supplémentaire par tenant n'est nécessaire.
Région de la passerelle API : Le workflow utilise par défaut
us.apigw.jamf.com. Si vos tenants sont en EU ou APAC, mettez à jour la constanteREGIONdans les nœuds de code Find Group + Build Members URL et Determine Management Id Lookup URL.
Étape 4 — Configuration de l'application Slack
Slash Command
- Dans votre application Slack : Slash Commands → Create New Command
- Commande :
/device-wipe(ou votre nom préféré) - Request URL :
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN - Description courte :
Submit a Jamf device wipe request
Interactivité
- Dans votre application Slack : Interactivity & Shortcuts → Turn On
- Request URL :
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN
La commande slash et les composants interactifs (soumissions modales, clics de bouton) doivent pointer vers la même URL webhook avec votre jeton de vérification comme paramètre de requête.
Étape 5 — Activer
- Ouvrez le workflow dans n8n
- Reliez à nouveau chaque nœud à sa accréditation (n8n efface les liens d'accréditation à l'importation)
- Cliquez sur Activate
- Testez avec
/device-wipedans Slack
Résumé du flux
/device-wipe (Slack)
→ Webhook → Verify Token → Parse Webhook
→ Switch on webhook type:
slash_command → Open Wipe Request Modal
view_submission → Parse Submission → Validate →
Resolve Device IDs → Send to Approval
approver_response → approve: LOG → Parse → Send Final Confirmation to Requestor
→ deny: LOG → DM Requestor
final_confirmation → confirm: LOG → Split per-device →
Send Erase Command × N →
Merge Results → DM Results → LOG
→ cancel: LOG → DM Requestor
timeout path → DM Requestor if no approval within APPROVAL_TIMEOUT_SECONDS
Dépannage
La modal ne s'ouvre pas
Vérifiez que l'URL de la demande de commande slash inclut ?token=YOUR_WEBHOOK_VERIFY_TOKEN. Le nœud Verify Token rejette les demandes où le jeton ne correspond pas.
La liste des approbateurs est vide
scim: confirmez queAPPROVER_USERGROUP_IDest correct et que l'application Slack ausergroups:readokta: confirmezIDP_OKTA_GROUP_IDet que l'accréditation Okta a accès à la lecture de groupeentra: confirmezENTRA_APPROVER_GROUP_IDet que l'application Entra aGroupMember.Read.All
La commande d'effacement retourne 4xx Confirmez que l'accréditation de l'API Jamf Platform a des privilèges d'effacement et que vous utilisez la bonne région de la passerelle API.
La liste déroulante de tenants affiche des valeurs d'espace réservé
Définissez les variables JAMF_TENANT_NAMES et JAMF_TENANT_IDS avant d'activer le workflow.