Jamf Concepts
指南

指南

Form to Wipe — n8n Deployment

~3 min read
这对您有帮助吗?

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

  1. api.slack.com/apps 创建Slack应用

  2. 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 在验证错误时更新模态
  3. 将应用安装到您的工作区并复制 Bot User OAuth Token

  4. 在n8n中:创建新的 HTTP Bearer Auth 凭证、粘贴令牌、将其命名为 Slack Auth Token

Jamf Platform API

  1. 在Jamf Pro中:Settings → API roles and clients → API Clients → New

  2. 分配具有 Form to Wipe 中列出的权限的角色

    关于静态计算机组的注意事项: Platform API没有原生的静态计算机组成员资格端点。工作流回退到Classic API代理(/api/proclassic/...),它由相同的 Read Computer Groups 权限覆盖。

  3. 生成客户端秘密并记下客户端ID和秘密

  4. 在n8n中:创建新的 OAuth2 API 凭证:

    • 授予类型:Client Credentials
    • 令牌URL:https://YOUR_INSTANCE.jamfcloud.com/api/oauth/token
    • 客户端ID / 秘密:来自上面
  5. 将其命名为 Jamf Platform API

API网关访问: 工作流也调用Jamf Platform API网关(apigw.jamf.com)。如果您没有访问权限,请与您的Jamf代表联系。

Okta API — 仅当 IDP_PROVIDER = okta

  1. 在Okta中:Security → API → Tokens → Create Token
  2. 在n8n中:创建新的 Okta API 凭证,填入您的Okta域和令牌
  3. 将其命名为 Okta account

Microsoft Entra — 仅当 IDP_PROVIDER = entra

  1. 在Azure中:App registrations → New registration
  2. 添加API权限:GroupMember.Read.All(应用程序类型)并授予管理员同意
  3. 创建客户端秘密
  4. 在n8n中:创建新的 Microsoft Entra OAuth2 凭证
  5. 将其命名为 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 从哪里提取批准者列表:scimidpdev idp
IDP_PROVIDER 如果 APPROVER_SOURCE=idp 必需:entraokta 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_NAMESJAMF_TENANT_IDS 变量必须处于相同的顺序——名称的索引0映射到ID的索引0。Slack模态中的租户下拉菜单在运行时从这些变量动态构建;不需要额外的每租户配置。

API网关区域: 工作流默认为 us.apigw.jamf.com。如果您的租户位于EU或APAC,请更新 Find Group + Build Members URLDetermine Management Id Lookup URL 代码节点中的 REGION 常量。

步骤 4 — Slack应用设置

斜杠命令

  1. 在您的Slack应用中:Slash Commands → Create New Command
  2. 命令:/device-wipe(或您的首选名称)
  3. 请求URL:https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN
  4. 简短描述:Submit a Jamf device wipe request

交互性

  1. 在您的Slack应用中:Interactivity & Shortcuts → Turn On
  2. 请求URL:https://YOUR_N8N_INSTANCE/webhook/jamf-device-wipe?token=YOUR_WEBHOOK_VERIFY_TOKEN

斜杠命令和交互组件(模态提交、按钮单击)都必须指向带有您的验证令牌作为查询参数的 相同webhook URL

步骤 5 — 激活

  1. 在n8n中打开工作流
  2. 将每个节点重新链接到其凭证(n8n在导入时清除凭证链接)
  3. 单击 激活
  4. 在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:read
  • okta:确认 IDP_OKTA_GROUP_ID,并且Okta凭证具有群组读取访问权限
  • entra:确认 ENTRA_APPROVER_GROUP_ID,并且Entra应用具有 GroupMember.Read.All

擦除命令返回4xx 确认Jamf Platform API凭证具有擦除权限,并且您使用的是正确的API网关区域。

租户下拉菜单显示占位符值 在激活工作流之前设置 JAMF_TENANT_NAMESJAMF_TENANT_IDS 变量。

这对您有帮助吗?