Form to Wipe — Wdrażanie n8n
Ten przewodnik obejmuje implementację n8n Form to Wipe. Używa polecenia slash Slack do otwarcia modalu, kieruje żądanie do zatwierdzającego za pośrednictwem Slack DM i wysyła polecenia erase za pośrednictwem Jamf Platform API. Zatwierdzający mogą pochodzić z Microsoft Entra, Okta lub Slack usergroup.
Wymagania wstępne
- n8n self-hosted (≥ 1.30) lub n8n Cloud
- Aplikacja Slack z wymaganymi zakresami (zobacz Krok 2 poniżej)
- Klient OAuth2 Jamf Platform API z uprawnieniami erase (zobacz Form to Wipe)
- Jeden z: Rejestracja aplikacji Microsoft Entra, token API Okta, lub Slack usergroup dla zatwierdzających
Krok 1 — Importuj przepływ pracy
W n8n: Workflows → Import from file → wybierz Jamf-FTW-n8n-template.json.
Przepływ pracy importuje się jako nieaktywny. Nie aktywuj jeszcze — najpierw ukończ konfigurację poświadczeń i zmiennych.
Krok 2 — Poświadczenia
Utwórz następujące poświadczenia w Settings → Credentials przed połączeniem przepływu pracy.
Token autoryzacji Slack
Utwórz aplikację Slack na api.slack.com/apps
Dodaj następujące Bot Token Scopes w OAuth & Permissions:
Zakres Cel commandsOdbieraj polecenia slash chat:writeWysyłaj DM i wiadomości kanału chat:deleteWyczyść wiadomości zatwierdzenia po decyzji users:readWyszukaj użytkowników po ID users:read.emailWyszukaj użytkowników po wiadomości e-mail (ścieżki Okta/Entra) usergroups:readPrzeczytaj członkostwo Slack usergroup views:openOtwieraj modale views:updateAktualizuj modale przy błędzie walidacji Zainstaluj aplikację do Twojego workspace i skopiuj Bot User OAuth Token
W n8n: utwórz nowe poświadczenia HTTP Bearer Auth, wklej token, nazwij je
Slack Auth Token
Jamf Platform API
W Jamf Pro: Settings → API roles and clients → API Clients → New
Przypisz rolę z uprawnieniami wymienionymi w Form to Wipe
Uwaga na statyczne grupy komputerów: Platform API nie ma natywnego punktu końcowego członkostwa statycznej grupy komputerów. Przepływ pracy wraca do klasycznego API proxy (
/api/proclassic/...), który jest pokryty tym samym uprawnieniemRead Computer Groups.Wygeneruj tajemnicę klienta i zanotuj ID klienta i tajemnicę
W n8n: utwórz nowe poświadczenia OAuth2 API:
- Grant type:
Client Credentials - Token URL:
https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token - Client ID / Secret: z powyżej
- Grant type:
Nazwij je
Jamf Platform API
Dostęp API Gateway: Przepływ pracy również wywołuje Jamf Platform API Gateway (
apigw.jamf.com). Skontaktuj się ze swoim przedstawicielem Jamf, jeśli nie masz dostępu.
Okta API — tylko jeśli IDP_PROVIDER = okta
- W Okta: Security → API → Tokens → Create Token
- W n8n: utwórz nowe poświadczenia Okta API z Twoją domeną Okta i tokenem
- Nazwij je
Okta account
Microsoft Entra — tylko jeśli IDP_PROVIDER = entra
- W Azure: App registrations → New registration
- Dodaj uprawnienie API:
GroupMember.Read.All(typ aplikacji) i udziel zgody administratora - Utwórz tajemnicę klienta
- W n8n: utwórz nowe poświadczenia Microsoft Entra OAuth2
- Nazwij je
Microsoft Entra ID (Azure Active Directory) account
Krok 3 — Zmienne
Utwórz każdą zmienną w n8n w Settings → Variables.
Wymagane zmienne
| Zmienna | Opis | Przykład |
|---|---|---|
JAMF_TENANT_NAMES |
Nazwy wyświetlane rozdzielone przecinkami dla dzierżawców Jamf | Production,Staging |
JAMF_TENANT_IDS |
Identyfikatory UUID dzierżawcy rozdzielone przecinkami — ta sama kolejność co nazwy | aaaaaaaa-...,bbbbbbbb-... |
APPROVER_SOURCE |
Skąd ściągnąć listę zatwierdzającego: scim, idp, lub dev |
idp |
IDP_PROVIDER |
Wymagane jeśli APPROVER_SOURCE=idp: entra lub okta |
entra |
APPROVAL_TIMEOUT_SECONDS |
Jak długo zanim żądanie wygaśnie | 3600 |
AUDIT_LOG_CHANNEL_ID |
ID kanału Slack dla wszystkich zdarzeń audytu | C0123456789 |
WEBHOOK_VERIFY_TOKEN |
UUID lub losowa tajemnica — również ustaw w URL polecenia slash Slack | your-secret-uuid |
Zmienne według źródła zatwierdzającego
Jeśli APPROVER_SOURCE = scim (Slack usergroup):
| Zmienna | Wartość |
|---|---|
APPROVER_USERGROUP_ID |
ID Slack usergroup — format: S0XXXXXXXX |
Jeśli APPROVER_SOURCE = idp + IDP_PROVIDER = okta:
| Zmienna | Wartość |
|---|---|
IDP_OKTA_GROUP_ID |
ID grupy Okta — format: 00gXXXXXX |
IDP_OKTA_SLACK_EMAIL_FIELD |
Pole profilu do użycia dla wyszukiwania wiadomości e-mail Slack (zwykle email) |
Jeśli APPROVER_SOURCE = idp + IDP_PROVIDER = entra:
| Zmienna | Wartość |
|---|---|
ENTRA_APPROVER_GROUP_ID |
ID obiektu Azure AD grupy zatwierdzającego |
Jeśli APPROVER_SOURCE = dev (alternatywny Slack usergroup, do testowania):
| Zmienna | Wartość |
|---|---|
DEV_APPROVER_USERGROUP_ID |
ID Slack usergroup dla zatwierdzających dev/test |
Konfiguracja multi-tenantowa
Zmienne JAMF_TENANT_NAMES i JAMF_TENANT_IDS muszą być w tej samej kolejności — indeks 0 nazw mapuje do indeksu 0 ID. Rozwijana lista dzierżawcy w modalu Slack jest budowana dynamicznie w czasie wykonywania z tych zmiennych; nie jest wymagana dodatkowa konfiguracja dla każdego dzierżawcy.
Region API Gateway: Przepływ pracy domyślnie ustawia na
us.apigw.jamf.com. Jeśli Twoje dzierżawcy są w EU lub APAC, zaktualizuj stałąREGIONw węzłach kodu Find Group + Build Members URL i Determine Management Id Lookup URL.
Krok 4 — Konfiguracja aplikacji Slack
Polecenie Slash
- W aplikacji Slack: Slash Commands → Create New Command
- Command:
/device-wipe(lub Twoja preferowana nazwa) - Request URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN - Short description:
Submit a Jamf device wipe request
Interaktywność
- W aplikacji Slack: Interactivity & Shortcuts → Turn On
- Request URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN
Zarówno polecenie slash jak i komponenty interaktywne (przesyłania modalu, kliknięcia przycisku) muszą wskazywać na ten sam URL webhook ze swoim tokenem weryfikacji jako parametrem zapytania.
Krok 5 — Aktywuj
- Otwórz przepływ pracy w n8n
- Ponownie połącz każdy węzeł do jego poświadczeń (n8n czyści linki poświadczeń przy imporcie)
- Kliknij Activate
- Przetestuj
/device-wipew Slack
Podsumowanie przepływu
/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
Rozwiązywanie problemów
Modal się nie otwiera
Sprawdź, czy URL żądania polecenia slash zawiera ?token=YOUR_WEBHOOK_VERIFY_TOKEN. Węzeł Verify Token odrzuca żądania, gdzie token się nie zgadza.
Lista zatwierdzającego jest pusta
scim: potwierdź, żeAPPROVER_USERGROUP_IDjest poprawny i aplikacja Slack mausergroups:readokta: potwierdźIDP_OKTA_GROUP_IDi że poświadczenia Okta mają dostęp do odczytu grupyentra: potwierdźENTRA_APPROVER_GROUP_IDi że aplikacja Entra maGroupMember.Read.All
Polecenie Erase zwraca 4xx Potwierdź, że poświadczenia Jamf Platform API mają uprawnienia erase i że używasz prawidłowego regionu API Gateway.
Rozwijana lista dzierżawcy pokazuje wartości zastępcze
Ustaw zmienne JAMF_TENANT_NAMES i JAMF_TENANT_IDS przed aktywacją przepływu pracy.