Form to Wipe — n8n 部署
本指南涵蓋 Form to Wipe 的 n8n 實現。它使用 Slack 斜線命令開啟模式、通過 Slack DM 將請求路由到核准者,並通過 Jamf Platform API 傳送清除指令。核准者可以來自 Microsoft Entra、Okta 或 Slack 使用者群組。
先決條件
- n8n 自託管(≥ 1.30)或 n8n 雲端
- 具有必需範圍的 Slack 應用程式(參見下面的步驟 2)
- Jamf Platform API OAuth2 用戶端,具有清除特權(參見 Form to Wipe)
- 其中之一:Microsoft Entra 應用程式註冊、Okta API 權杖或核准者的 Slack 使用者群組
步驟 1 — 匯入工作流程
在 n8n 中:Workflows → Import from file → 選擇 Jamf-FTW-n8n-template.json。
工作流程匯入為非活動。暫時不啟動 — 先完成憑證和變數設定。
步驟 2 — 憑證
在連接工作流程前,在 Settings → Credentials 中建立以下憑證。
Slack Auth Token
在 api.slack.com/apps 建立 Slack 應用程式
在 OAuth & Permissions 下新增以下 Bot Token Scopes:
範圍 目的 commands接收斜線命令 chat:write傳送 DM 和通道訊息 chat:delete決定後清理核准訊息 users:read依 ID 查詢使用者 users:read.email依電子郵件查詢使用者(Okta/Entra 路徑) usergroups:read讀取 Slack 使用者群組成員資格 views:open開啟模式 views:update驗證錯誤時更新模式 將應用程式安裝到您的工作區並複製 Bot User OAuth Token
在 n8n 中:建立新的 HTTP Bearer Auth 憑證、貼上權杖、命名為
Slack Auth Token
Jamf Platform API
在 Jamf Pro 中:Settings → API roles and clients → API Clients → New
指派具有 Form to Wipe 中列出的特權的角色
靜態電腦群組注意事項: Platform API 沒有原生的靜態電腦群組成員資格端點。工作流程回落到 Classic API proxy (
/api/proclassic/...),由相同的Read Computer Groups特權涵蓋。生成用戶端機密並注意用戶端 ID 和機密
在 n8n 中:建立新的 OAuth2 API 憑證:
- 授予類型:
Client Credentials - 權杖 URL:
https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token - 用戶端 ID / 機密:來自上方
- 授予類型:
命名為
Jamf Platform API
API Gateway 存取: 工作流程也呼叫 Jamf Platform API Gateway (
apigw.jamf.com)。如果您無法存取,請聯絡您的 Jamf 代表。
Okta API — 僅當 IDP_PROVIDER = okta 時
- 在 Okta 中:Security → API → Tokens → Create Token
- 在 n8n 中:使用您的 Okta 網域和權杖建立新的 Okta API 憑證
- 命名為
Okta account
Microsoft Entra — 僅當 IDP_PROVIDER = entra 時
- 在 Azure 中:App registrations → New registration
- 新增 API 權限:
GroupMember.Read.All(應用程式類型)並授予管理員同意 - 建立用戶端機密
- 在 n8n 中:建立新的 Microsoft Entra OAuth2 憑證
- 命名為
Microsoft Entra ID (Azure Active Directory) account
步驟 3 — 變數
在 n8n 中的 Settings → Variables 下建立每個變數。
必需變數
| 變數 | 說明 | 範例 |
|---|---|---|
JAMF_TENANT_NAMES |
您 Jamf 租戶的以逗號分隔的顯示名稱 | Production,Staging |
JAMF_TENANT_IDS |
以逗號分隔的租戶 UUID — 與名稱相同的順序 | aaaaaaaa-...,bbbbbbbb-... |
APPROVER_SOURCE |
從何處提取核准者清單:scim、idp 或 dev |
idp |
IDP_PROVIDER |
在 APPROVER_SOURCE=idp 時必需:entra 或 okta |
entra |
APPROVAL_TIMEOUT_SECONDS |
請求過期前的時間長度 | 3600 |
AUDIT_LOG_CHANNEL_ID |
所有稽核事件的 Slack 通道 ID | C0123456789 |
WEBHOOK_VERIFY_TOKEN |
UUID 或隨機機密 — 也在 Slack 斜線命令 URL 中設定 | your-secret-uuid |
按核准者來源的變數
如果 APPROVER_SOURCE = scim(Slack 使用者群組):
| 變數 | 值 |
|---|---|
APPROVER_USERGROUP_ID |
Slack 使用者群組 ID — 格式:S0XXXXXXXX |
如果 APPROVER_SOURCE = idp + IDP_PROVIDER = okta:
| 變數 | 值 |
|---|---|
IDP_OKTA_GROUP_ID |
Okta 群組 ID — 格式:00gXXXXXX |
IDP_OKTA_SLACK_EMAIL_FIELD |
用於 Slack 電子郵件查詢的設定檔欄位(通常 email) |
如果 APPROVER_SOURCE = idp + IDP_PROVIDER = entra:
| 變數 | 值 |
|---|---|
ENTRA_APPROVER_GROUP_ID |
您核准者群組的 Azure AD 物件 ID |
如果 APPROVER_SOURCE = dev(替代 Slack 使用者群組,用於測試):
| 變數 | 值 |
|---|---|
DEV_APPROVER_USERGROUP_ID |
開發/測試核准者的 Slack 使用者群組 ID |
多租戶配置
JAMF_TENANT_NAMES 和 JAMF_TENANT_IDS 變數必須按相同順序 — 名稱的索引 0 對應到 ID 的索引 0。Slack 模式中的租戶下拉清單在執行時從這些變數動態建立;不需要按租戶的額外配置。
API Gateway 區域: 工作流程預設為
us.apigw.jamf.com。如果您的租戶在 EU 或 APAC,在 Find Group + Build Members URL 和 Determine Management Id Lookup URL 程式碼節點中更新REGION常數。
步驟 4 — Slack 應用程式設定
斜線命令
- 在您的 Slack 應用程式中:Slash Commands → Create New Command
- 命令:
/device-wipe(或您偏好的名稱) - 請求 URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN - 簡短說明:
Submit a Jamf device wipe request
互動性
- 在您的 Slack 應用程式中:Interactivity & Shortcuts → Turn On
- 請求 URL:
https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN
斜線命令和互動式元件(模式提交、按鈕點擊)都必須指向相同的 webhook URL,並以您的驗證權杖作為查詢參數。
步驟 5 — 啟動
- 在 n8n 中開啟工作流程
- 將每個節點重新連結到其憑證(n8n 在匯入時清除憑證連結)
- 按一下啟動
- 在 Slack 中使用
/device-wipe測試
流程摘要
/device-wipe (Slack)
→ Webhook → 驗證權杖 → 解析 Webhook
→ 按 webhook 類型切換:
slash_command → 開啟清除請求模式
view_submission → 解析提交 → 驗證 →
解析裝置 ID → 傳送到核准
approver_response → 核准:記錄 → 解析 → 向請求者傳送最終確認
→ 拒絕: 記錄 → DM 請求者
final_confirmation → 確認:記錄 → 每個裝置分割 →
傳送清除指令 × N →
合併結果 → DM 結果 → 記錄
→ 取消: 記錄 → DM 請求者
timeout path → 如果 APPROVAL_TIMEOUT_SECONDS 內沒有核准,DM 請求者
故障排除
模式不開啟
驗證斜線命令請求 URL 包含 ?token=YOUR_WEBHOOK_VERIFY_TOKEN。驗證權杖節點拒絕權杖不符的請求。
核准者清單為空
scim:確認APPROVER_USERGROUP_ID正確且 Slack 應用程式具有usergroups:readokta:確認IDP_OKTA_GROUP_ID且 Okta 憑證具有群組讀取存取entra:確認ENTRA_APPROVER_GROUP_ID且 Entra 應用程式具有GroupMember.Read.All
清除指令返回 4xx 確認 Jamf Platform API 憑證具有清除特權且您使用正確的 API Gateway 區域。
租戶下拉清單顯示預留位置值
在啟動工作流程前設定 JAMF_TENANT_NAMES 和 JAMF_TENANT_IDS 變數。