使用 Microsoft Entra 智能体 ID 保护 n8n 智能体

本指南演示如何使用 Microsoft Entra 智能体 ID 集成在Azure 容器应用上部署 n8n。 部署使用 Azure 开发人员 CLI(azd)来预配基础结构、创建Microsoft Entra标识对象并自动配置 n8n 工作流。

与用于自定义代理的 使用 Microsoft Entra ID Auth SDK(sidecar)进行身份验证 模式不同,n8n 集成使用 n8n-nodes-entraagentid 社区节点在 n8n 工作流中直接管理令牌获取流程。 部署的工作流展示了自主(仅限应用)和代表(OBO)令牌流,能够访问 Microsoft Graph 和 Microsoft Graph 企业版的 MCP 服务器,https://mcp.svc.cloud.microsoft/enterprise

注释

此示例演示如何在 n8n-nodes-entraagentid n8n 中使用社区节点。 这不是在 Azure 上的生产环境中部署 n8n 的指导。

先决条件

在开始之前,请确保具备:

  • 具有Azure OpenAI(GPT-4o 或类似)、PostgreSQL 灵活服务器和Azure 容器应用配额的Azure订阅。
  • Microsoft Entra 租户中的全局管理员角色。 此角色是必需的,因为自动化会创建多个Microsoft Entra对象,并授予管理员对权限的许可。 使用 Privileged Identity Management (PIM)实时激活此角色。

在继续操作之前安装这些工具:

对Azure CLI和Azure开发人员 CLI 进行身份验证,以便部署命令可以在订阅中创建和管理资源:

az login
azd auth login

克隆和部署

整个部署通过单个 azd up 命令运行,该命令预配Azure基础结构并自动配置 n8n。 按照以下步骤部署 n8n:

  1. 克隆存储库并启动部署:

    git clone https://github.com/astaykov/n8n-aca.git && cd n8n-aca && azd auth login && azd up
    
  2. 出现提示时,请提供以下值:

    • 环境名称: 任何名称(例如, my-n8n)。 用于隔离此部署。
    • Azure subscription: 选择要用于部署的订阅。
    • Azure location: 选择区域(例如,China North 3)。
    • n8n 管理员电子邮件: n8n 所有者帐户的电子邮件。
    • n8n 管理员密码: n8n 所有者帐户的密码(最小 8 个字符,混合大小写,数字)。
  3. 在配置后阶段,自动化系统执行第二次登录。 将显示设备代码。 打开 URL 并输入代码。 此步骤需要全局管理员或应用程序管理员角色。 azd up 预配后挂钩然后:

    • 创建Microsoft Entra 智能体 ID对象(蓝图、代理标识、代理用户)。
    • 启用 Microsoft Graph MCP Server for Enterprise。
    • 等待 n8n 准备就绪。
    • 创建所有者帐户。
    • 安装@astaykov/n8n-nodes-entraagentid社区节点。
    • 为 n8n 自动化生成 API 密钥。
    • 创建所有五个具有实际值的凭据。
    • 导入并激活三个演示工作流。

部署完成后,该脚本将输出 n8n URL 和配置的摘要。 从Azure登录中自动检测到租户 ID,因此无需手动配置。

浏览已部署的资源

部署将创建Azure资源、Microsoft Entra标识对象和 n8n 配置资产,这些资产协同工作以支持示例工作流。

查看Azure基础结构资源

部署将创建以下 Azure 资源:

  • 容器应用环境: 托管 n8n 和测试 SPA。
  • n8n 容器应用: 使用 HTTPS 入口运行官方 n8nio/n8n 镜像。
  • 静态 Web 应用: 测试 OBO Webhook 流的 SPA。
  • PostgreSQL 弹性服务器: 用于工作流、凭据和执行历史记录的持久化存储(可突发 B1ms)。
  • 存储帐户和文件共享: 持久 /home/node/.n8n 目录。 社区节点和配置在重启时保持不变。
  • Azure OpenAI: AI 代理工作流使用的 GPT 模型部署。
  • Log Analytics Workspace: 诊断和监视。

查看 Microsoft Entra 标识对象

自动化一次创建这些对象,并在后续运行中重复使用这些对象:

  • 代理身份规划:通过联合身份凭据为代理身份颁发令牌的应用程序注册。
  • 代理身份服务主体: AI 代理的服务主体。 自主获取 Microsoft Graph 和 MCP 令牌。
  • 智能体用户帐户:启用委托 (OBO) 令牌流的仅限云用户标识。
  • 单页应用(SPA)应用注册: Webhook 演示的客户端应用,预配置了重定向 URI 和蓝图 API 权限。

审查 n8n 凭据和工作流

预配后挂钩会自动配置 n8n:

创建的凭据:

  • EntraAgentID - Autonomous:仅限应用的Microsoft 图形 API令牌(无用户上下文)。
  • EntraAgentID - 代理用户 OBO: 代表代理用户的委托令牌。
  • Azure OpenAI:连接到为 AI 代理工作流部署的 GPT 模型。
  • AgentID 身份验证管理器 - 访问令牌: 从身份验证管理器转发到下游节点的令牌。
  • 来自 AuthManager 的持有者:MCP 调用的持有者令牌转发。

导入的工作流:

  • 代理 ID 身份验证管理器 - 具有 MCP Enterprise 的代理用户: 获取代理用户的委托 MCP 令牌,并将其转发到子工作流。
  • HTTP 请求,其中包含自治代理令牌:演示了使用仅限应用的令牌直接调用Microsoft Graph的自治代理。
  • Webhook - 交互式代理(代表已登录用户): 该 Webhook 入口点从 SPA 接收 Bearer 令牌,调用身份验证管理器,并代表已登录用户通过 Graph MCP Server 返回响应。

了解令牌流

n8n 部署支持两种令牌流模式:

  • 自治(仅限应用): n8n 工作流使用具有联合身份凭据的代理身份蓝图凭据来获取代理身份服务主体的应用专用令牌。 然后,工作流会直接使用此令牌调用Microsoft Graph。 不涉及任何用户上下文。

  • 以 MCP 名义 (OBO): 基于浏览器的 SPA 将持有令牌发送到 n8n Webhook。 Webhook 调用身份验证管理器工作流,该工作流使用蓝图凭据代表代理用户获取委托令牌。 身份验证管理器将令牌转发到调用 Microsoft Graph MCP Server for Enterprise 的子工作流,该子工作流使用委托令牌将 MCP 工具调用转换为Microsoft Graph API 请求。

在这两种模式中,“代理身份蓝图”扮演着令牌工厂的角色。 代理身份蓝图可为代理身份签发令牌,而无需将凭据存储在代理本身上。 身份验证管理器社区节点处理每个工作流运行中的令牌获取和 AES-256-GCM 缓存。

部署测试 SPA (可选)

测试 SPA 是一个静态 JavaScript 应用,演示来自浏览器的 OBO Webhook 流。

  1. 在初始预配完成后部署它:

    azd deploy spa
    

了解 MCP 服务器范围

该设置向智能体标识服务主体授予以下委托 MCP.* 范围。 这些范围镜像其 Microsoft Graph 对应项(例如,MCP.User.Read.All 对应于 User.Read.All):

  • MCP.User.Read.All:读取所有用户。
  • MCP.Organization.Read.All:读取租户组织信息。
  • MCP.Group.Read.All:读取所有组。
  • MCP.GroupMember.Read.All:读取组成员身份。
  • MCP.Application.Read.All:读取应用注册和服务主体。
  • MCP.AuditLog.Read.All:读取登录和审核日志。
  • MCP.Reports.Read.All:读取Microsoft 365使用情况报告。
  • MCP.Policy.Read.All:读取条件访问策略。
  • MCP.Domain.Read.All:读取已验证的域。
  • MCP.Device.Read.All:读取 Microsoft Entra 注册的设备。

若要添加更多范围,请编辑 $MCP_SCOPES 数组 scripts/Setup-EntraAgentId.ps1 并重新运行 azd provision

注释

MCP 服务器仅支持委派的权限流。 使用自治凭据进行仅应用 Microsoft Graph 调用。

重新运行和更新部署

部署是完全幂等的:

  • Bicep 跳过已存在的 Azure 资源。
  • azd 环境在首次运行后保存Microsoft Entra对象 ID(蓝图、代理标识、代理用户、蓝图机密),并在后续运行中重复使用它们。
  • n8n 配置(凭据,工作流)在每次运行时从头应用,这可以修复损坏的状态。

若要在不修改基础结构的情况下重新运行预配后脚本,请再次运行预配。 Bicep 模板未检测到任何基础设施更改,并且仅执行部署钩子:

azd provision   # Bicep detects no changes, runs hooks only

手动运行脚本(可选)

如果需要,可以独立运行配置脚本:

  • 全端到端(Microsoft Entra和n8n):

    .\scripts\Run-All.ps1 `
        -TenantId  "<your-tenant-id>" `
        -N8nUrl    "https://ca-n8n-<token>.<region>.azurecontainerapps.io"
    
  • 仅限 n8n 配置(跳过 Entra 安装程序):

    .\scripts\Configure-N8n.ps1 `
        -N8nUrl          "https://ca-n8n-<token>.<region>.azurecontainerapps.io" `
        -OwnerEmail      "admin@contoso.com" `
        -OwnerPassword   "MyStr0ngPassword!"
    
  • 仅 Entra 设置:

    .\scripts\Setup-EntraAgentId.ps1 `
        -TenantId  "<your-tenant-id>" `
        -N8nUrl    "https://ca-n8n-<token>.<region>.azurecontainerapps.io"
    

清理资源

删除部署创建的所有Azure资源,并清除任何保留的部署状态:

azd down --purge

注释

azd down 命令删除Azure资源,但不会删除蓝图、代理标识或代理用户帐户等Microsoft Entra对象。 如果不再需要这些对象,请在Microsoft Entra 管理中心中手动删除这些对象。