Form to Wipe — n8n Deployment
本指南涵盖了Form to Wipe的n8n实现。它使用Slack斜杠命令打开模态、通过Slack DM路由请求给批准者,并通过Jamf Platform API发送擦除命令。批准者可以来自Microsoft Entra、Okta或Slack用户组。
先决条件
- n8n自托管(≥ 1.30)或n8n Cloud
- 具有所需作用域的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代理(
/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网关访问: 工作流也调用Jamf Platform API网关(
apigw.jamf.com)。如果您没有访问权限,请与您的Jamf代表联系。
Okta API — 仅当 IDP_PROVIDER = okta 时
- 在Okta中:Security → API → Tokens → Create Token
- 在n8n中:创建新的 Okta API 凭证,填入您的Okta域和令牌
- 将其命名为
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网关区域: 工作流默认为
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 → 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
故障排除
模态不打开
验证斜杠命令请求URL是否包含 ?token=YOUR_WEBHOOK_VERIFY_TOKEN。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网关区域。
租户下拉菜单显示占位符值
在激活工作流之前设置 JAMF_TENANT_NAMES 和 JAMF_TENANT_IDS 变量。