Form to Wipe — n8n Deployment
Deze gids behandelt de n8n-implementatie van Form to Wipe. Het gebruikt een Slack slash command om een modal te openen, stuurt het verzoek naar een fiatteur via Slack DM en stuurt wiscommando's via de Jamf Platform API. Fiatteurs kunnen afkomstig zijn van Microsoft Entra, Okta of een Slack usergroup.
Vereisten
- n8n self-hosted (≥ 1.30) of n8n Cloud
- Slack-app met vereiste scopes (zie Stap 2 hieronder)
- Jamf Platform API OAuth2-client met wisrechten (zie Form to Wipe)
- Een van: Microsoft Entra app-registratie, Okta API-token of een Slack usergroup voor fiatteurs
Stap 1 — Workflow importeren
In n8n: Workflows → Import from file → selecteer Jamf-FTW-n8n-template.json.
De workflow wordt als inactief geïmporteerd. Activeer nog niet — voltooi eerst credential- en variabeleinstellingen.
Stap 2 — Inloggegevens
Maak de volgende inloggegevens aan in Settings → Credentials voordat u de werkstroom bekabelt.
Slack Auth Token
Maak een Slack-app aan op api.slack.com/apps
Voeg de volgende Bot Token Scopes toe onder OAuth & Permissions:
Scope Doel commandsSlash commands ontvangen chat:writeDM's en kanaalberichten verzenden chat:deleteGoedkeuringsberichten opschonen na een besluit users:readGebruikers op ID opzoeken users:read.emailGebruikers op e-mail opzoeken (Okta/Entra paden) usergroups:readSlack usergroup-lidmaatschap lezen views:openModals openen views:updateModals bijwerken bij validatiefout Installeer de app in uw werkruimte en kopieer het Bot User OAuth Token
In n8n: maak een nieuwe HTTP Bearer Auth credential aan, plak het token, noem het
Slack Auth Token
Jamf Platform API
In Jamf Pro: Settings → API roles and clients → API Clients → New
Wijs een rol toe met de bevoegdheden uit Form to Wipe
Opmerking over statische computergroepen: De Platform API heeft geen native eindpunt voor statische computergroeplidmaatschap. De werkstroom valt terug op de Classic API-proxy (
/api/proclassic/...), die wordt gedekt door dezelfdeRead Computer Groupsbevoegdheid.Genereer een client secret en noteer de Client ID en Secret
In n8n: maak een nieuwe OAuth2 API credential aan:
- Grant type:
Client Credentials - Token URL:
https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token - Client ID / Secret: van hierboven
- Grant type:
Noem het
Jamf Platform API
API Gateway-toegang: De werkstroom roept ook de Jamf Platform API Gateway (
apigw.jamf.com) aan. Neem contact op met uw Jamf-vertegenwoordiger als u geen toegang hebt.
Okta API — alleen als IDP_PROVIDER = okta
- In Okta: Security → API → Tokens → Create Token
- In n8n: maak een nieuwe Okta API credential aan met uw Okta-domein en -token
- Noem het
Okta account
Microsoft Entra — alleen als IDP_PROVIDER = entra
- In Azure: App registrations → New registration
- Voeg API-machtiging toe:
GroupMember.Read.All(Application type) en verleen admin toestemming - Maak een client secret
- In n8n: maak een nieuwe Microsoft Entra OAuth2 credential aan
- Noem het
Microsoft Entra ID (Azure Active Directory) account
Stap 3 — Variabelen
Maak elke variabele aan in n8n onder Settings → Variables.
Vereiste variabelen
| Variabele | Beschrijving | Voorbeeld |
|---|---|---|
JAMF_TENANT_NAMES |
Door komma's gescheiden weergavenamen voor uw Jamf-tenants | Production,Staging |
JAMF_TENANT_IDS |
Door komma's gescheiden tenant UUID's — dezelfde volgorde als namen | aaaaaaaa-...,bbbbbbbb-... |
APPROVER_SOURCE |
Waar moet de fiatteurlijst vandaan komen: scim, idp of dev |
idp |
IDP_PROVIDER |
Vereist als APPROVER_SOURCE=idp: entra of okta |
entra |
APPROVAL_TIMEOUT_SECONDS |
Hoe lang voordat het verzoek verloopt | 3600 |
AUDIT_LOG_CHANNEL_ID |
Slack kanaal-ID voor alle auditgebeurtenissen | C0123456789 |
WEBHOOK_VERIFY_TOKEN |
Een UUID of willekeurig geheim — ook ingesteld in de Slack slash command URL | your-secret-uuid |
Variabelen per fiatteur bron
Als APPROVER_SOURCE = scim (Slack usergroup):
| Variabele | Waarde |
|---|---|
APPROVER_USERGROUP_ID |
Slack usergroup ID — indeling: S0XXXXXXXX |
Als APPROVER_SOURCE = idp + IDP_PROVIDER = okta:
| Variabele | Waarde |
|---|---|
IDP_OKTA_GROUP_ID |
Okta groep-ID — indeling: 00gXXXXXX |
IDP_OKTA_SLACK_EMAIL_FIELD |
Profielveld voor Slack-e-mailopzoeking (meestal email) |
Als APPROVER_SOURCE = idp + IDP_PROVIDER = entra:
| Variabele | Waarde |
|---|---|
ENTRA_APPROVER_GROUP_ID |
Azure AD Object ID van uw fiatteurgroep |
Als APPROVER_SOURCE = dev (alternatieve Slack usergroup, voor testen):
| Variabele | Waarde |
|---|---|
DEV_APPROVER_USERGROUP_ID |
Slack usergroup ID voor dev/test fiatteurs |
Multi-Tenant-configuratie
De variabelen JAMF_TENANT_NAMES en JAMF_TENANT_IDS moeten in dezelfde volgorde staan — index 0 van namen wijst toe aan index 0 van ID's. De tenant-vervolgkeuzelijst in de Slack-modal wordt dynamisch in runtime samengesteld uit deze variabelen; geen aanvullende configuratie per tenant is nodig.
API Gateway-regio: De werkstroom gebruikt standaard
us.apigw.jamf.com. Als uw tenants in EU of APAC zijn, werk deREGIONconstante bij in de Find Group + Build Members URL en Determine Management Id Lookup URL code nodes.
Stap 4 — Slack App Instellen
Slash Command
- In uw Slack-app: Slash Commands → Create New Command
- Command:
/device-wipe(of uw voorkeursnaam) - Request URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN - Korte beschrijving:
Submit a Jamf device wipe request
Interactiviteit
- In uw Slack-app: Interactivity & Shortcuts → Turn On
- Request URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN
Zowel de slash command als interactieve componenten (modal-indieningen, klikken op knoppen) moeten naar dezelfde webhook-URL wijzen met uw verificatie token als queryparameter.
Stap 5 — Activeren
- Open de werkstroom in n8n
- Koppel elke node opnieuw aan zijn credential (n8n wist credential-koppelingen bij import)
- Klik op Activate
- Test met
/device-wipein Slack
Flow samenvatting
/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
Probleemoplossing
Modal opent niet
Controleer of de slash command Request URL ?token=YOUR_WEBHOOK_VERIFY_TOKEN bevat. De Verify Token node wijst verzoeken af waarbij het token niet overeenkomt.
Fiatteurlijst is leeg
scim: controleer ofAPPROVER_USERGROUP_IDcorrect is en de Slack-appusergroups:readheeftokta: controleerIDP_OKTA_GROUP_IDen dat de Okta-credential groepsleestoegang heeftentra: controleerENTRA_APPROVER_GROUP_IDen dat de Entra-appGroupMember.Read.Allheeft
Wiscommando retourneert 4xx Controleer of de Jamf Platform API-credential wisrechten heeft en of u de juiste API Gateway-regio gebruikt.
Tenant-vervolgkeuzelijst toont tijdelijke aanduidingswaarden
Stel JAMF_TENANT_NAMES en JAMF_TENANT_IDS variabelen in voordat u de werkstroom activeert.