Form to Wipe — n8n Deployment
Dieses Handbuch behandelt die n8n-Implementierung von Form to Wipe. Es verwendet einen Slack-Slash-Befehl, um ein Modal zu öffnen, leitet die Anfrage über Slack DM an einen Genehmiger weiter und sendet Löschbefehle über die Jamf Platform API. Genehmiger können aus Microsoft Entra, Okta oder einer Slack-Usergroup sourced werden.
Voraussetzungen
- n8n selbst gehostet (≥ 1.30) oder n8n Cloud
- Slack-App mit erforderlichen Bereichen (siehe Schritt 2 unten)
- Jamf Platform API OAuth2-Client mit Löschberechtigungen (siehe Form to Wipe)
- Einer von: Microsoft Entra-App-Registrierung, Okta API-Token oder eine Slack-Usergroup für Genehmiger
Schritt 1 — Workflow importieren
In n8n: Workflows → Import from file → wählen Sie Jamf-FTW-n8n-template.json.
Der Workflow wird als inaktiv importiert. Aktivieren Sie noch nicht — führen Sie zunächst Credential- und Variablen-Setup durch.
Schritt 2 — Credentials
Erstellen Sie die folgenden Credentials in Settings → Credentials, bevor Sie den Workflow verbinden.
Slack Auth Token
Erstellen Sie eine Slack-App unter api.slack.com/apps
Fügen Sie die folgenden Bot Token Scopes unter OAuth & Permissions hinzu:
Scope Zweck commandsSlash-Befehle empfangen chat:writeDMs und Kanalnachrichten senden chat:deleteGenehmigungsnachrichten nach einer Entscheidung bereinigen users:readBenutzer nach ID nachschlagen users:read.emailBenutzer nach E-Mail nachschlagen (Okta/Entra-Pfade) usergroups:readSlack-Usergroup-Mitgliedschaft lesen views:openModals öffnen views:updateModals bei Validierungsfehler aktualisieren Installieren Sie die App in Ihrem Workspace und kopieren Sie den Bot User OAuth Token
In n8n: erstellen Sie einen neuen HTTP Bearer Auth-Credential, fügen Sie das Token ein, nennen Sie es
Slack Auth Token
Jamf Platform API
In Jamf Pro: Settings → API roles and clients → API Clients → New
Weisen Sie eine Rolle mit den in Form to Wipe aufgelisteten Berechtigungen zu
Hinweis zu statischen Computergruppen: Die Platform API hat keinen nativen Endpoint für statische Computergruppen-Mitgliedschaft. Der Workflow fällt auf den Classic API-Proxy (
/api/proclassic/...) zurück, der von der gleichenRead Computer Groups-Berechtigung abgedeckt ist.Generieren Sie ein Client-Secret und notieren Sie die Client-ID und Secret
In n8n: erstellen Sie einen neuen OAuth2 API-Credential:
- Grant type:
Client Credentials - Token URL:
https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token - Client ID / Secret: von oben
- Grant type:
Nennen Sie es
Jamf Platform API
API Gateway-Zugang: Der Workflow ruft auch das Jamf Platform API Gateway (
apigw.jamf.com) auf. Kontaktieren Sie Ihren Jamf-Vertreter, wenn Sie keinen Zugang haben.
Okta API — nur wenn IDP_PROVIDER = okta
- In Okta: Security → API → Tokens → Create Token
- In n8n: erstellen Sie einen neuen Okta API-Credential mit Ihrer Okta-Domain und dem Token
- Nennen Sie es
Okta account
Microsoft Entra — nur wenn IDP_PROVIDER = entra
- In Azure: App registrations → New registration
- API-Berechtigung hinzufügen:
GroupMember.Read.All(Anwendungstyp) und Admin-Zustimmung erteilen - Erstellen Sie ein Client-Secret
- In n8n: erstellen Sie einen neuen Microsoft Entra OAuth2-Credential
- Nennen Sie es
Microsoft Entra ID (Azure Active Directory) account
Schritt 3 — Variablen
Erstellen Sie jede Variable in n8n unter Settings → Variables.
Erforderliche Variablen
| Variable | Beschreibung | Beispiel |
|---|---|---|
JAMF_TENANT_NAMES |
Komma-getrennte Anzeigenamen für Ihre Jamf-Tenants | Production,Staging |
JAMF_TENANT_IDS |
Komma-getrennte Tenant-UUIDs — gleiche Reihenfolge wie Namen | aaaaaaaa-...,bbbbbbbb-... |
APPROVER_SOURCE |
Wo die Genehmiger-Liste gezogen werden soll: scim, idp oder dev |
idp |
IDP_PROVIDER |
Erforderlich wenn APPROVER_SOURCE=idp: entra oder okta |
entra |
APPROVAL_TIMEOUT_SECONDS |
Wie lange die Anfrage gültig ist | 3600 |
AUDIT_LOG_CHANNEL_ID |
Slack-Kanal-ID für alle Audit-Ereignisse | C0123456789 |
WEBHOOK_VERIFY_TOKEN |
Eine UUID oder ein zufälliges Secret — auch in der Slack-Slash-Befehl-URL gesetzt | your-secret-uuid |
Variablen nach Genehmiger-Quelle
Wenn APPROVER_SOURCE = scim (Slack-Usergroup):
| Variable | Wert |
|---|---|
APPROVER_USERGROUP_ID |
Slack-Usergroup-ID — Format: S0XXXXXXXX |
Wenn APPROVER_SOURCE = idp + IDP_PROVIDER = okta:
| Variable | Wert |
|---|---|
IDP_OKTA_GROUP_ID |
Okta-Gruppen-ID — Format: 00gXXXXXX |
IDP_OKTA_SLACK_EMAIL_FIELD |
Profilfeld für die Slack-E-Mail-Suche (normalerweise email) |
Wenn APPROVER_SOURCE = idp + IDP_PROVIDER = entra:
| Variable | Wert |
|---|---|
ENTRA_APPROVER_GROUP_ID |
Azure AD Object ID Ihrer Genehmiger-Gruppe |
Wenn APPROVER_SOURCE = dev (alternative Slack-Usergroup, zum Testen):
| Variable | Wert |
|---|---|
DEV_APPROVER_USERGROUP_ID |
Slack-Usergroup-ID für Dev/Test-Genehmiger |
Multi-Tenant-Konfiguration
Die Variablen JAMF_TENANT_NAMES und JAMF_TENANT_IDS müssen in der gleichen Reihenfolge sein — Index 0 der Namen wird auf Index 0 der IDs abgebildet. Das Tenant-Dropdown im Slack-Modal wird zur Laufzeit dynamisch aus diesen Variablen erstellt; keine zusätzliche Pro-Tenant-Konfiguration ist erforderlich.
API Gateway-Region: Der Workflow wird standardmäßig auf
us.apigw.jamf.comeingestellt. Wenn sich Ihre Tenants in EU oder APAC befinden, aktualisieren Sie dieREGION-Konstante in den Code-Nodes Find Group + Build Members URL und Determine Management Id Lookup URL.
Schritt 4 — Slack App Setup
Slash-Befehl
- In Ihrer Slack-App: Slash Commands → Create New Command
- Befehl:
/device-wipe(oder Ihr bevorzugter Name) - Request URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN - Kurzbeschreibung:
Submit a Jamf device wipe request
Interaktivität
- In Ihrer Slack-App: Interactivity & Shortcuts → Turn On
- Request URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN
Sowohl der Slash-Befehl als auch die interaktiven Komponenten (Modal-Übermittlungen, Button-Klicks) müssen auf die gleiche Webhook-URL mit Ihrem Verify-Token als Query-Parameter zeigen.
Schritt 5 — Aktivieren
- Öffnen Sie den Workflow in n8n
- Verbinden Sie jeden Node erneut mit seinen Credentials (n8n löscht Credential-Links beim Import)
- Klicken Sie auf Activate
- Testen Sie mit
/device-wipein Slack
Flow-Zusammenfassung
/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
Troubleshooting
Modal öffnet sich nicht
Überprüfen Sie, dass die Slash-Befehl-Request-URL ?token=YOUR_WEBHOOK_VERIFY_TOKEN enthält. Der Verify Token-Node lehnt Anfragen ab, bei denen das Token nicht übereinstimmt.
Genehmiger-Liste ist leer
scim: bestätigen Sie, dassAPPROVER_USERGROUP_IDkorrekt ist und die Slack-Appusergroups:readhatokta: bestätigen SieIDP_OKTA_GROUP_IDund dass das Okta-Credential Gruppenlese-Zugang hatentra: bestätigen SieENTRA_APPROVER_GROUP_IDund dass die Entra-AppGroupMember.Read.Allhat
Löschbefehl gibt 4xx zurück Bestätigen Sie, dass das Jamf Platform API-Credential Löschberechtigungen hat und dass Sie die korrekte API Gateway-Region verwenden.
Tenant-Dropdown zeigt Platzhalterwerte
Legen Sie JAMF_TENANT_NAMES und JAMF_TENANT_IDS-Variablen fest, bevor Sie den Workflow aktivieren.