使用 Azure 逻辑应用进行 API 驱动的入站预配

本教程介绍如何使用 Azure 逻辑应用工作流来实现 Microsoft Entra ID API 驱动的入站预配。 按照本教程中的步骤,可以将包含 HR 数据的 CSV 文件转换为批量请求有效负载,并将其发送到 Microsoft Entra 预配 /bulkUpload API 终结点。 本文还提供了有关如何将同一集成模式用于任何记录系统的指南。

集成方案

业务要求

你的记录系统定期生成包含辅助角色数据的 CSV 文件导出。 你希望实现一种集成,以便从 CSV 文件读取数据,并自动预配目标目录(对于混合用户为本地 Active Directory,对于仅云用户为 Microsoft Entra ID)中的用户账户。

实现要求

从实现的角度来看:

  • 你希望使用 Azure 逻辑应用工作流从 Azure 文件共享中提供的 CSV 文件导出中读取数据,并将其发送到入站预配 API 终结点。
  • 在 Azure 逻辑应用工作流中,你不希望实现在记录系统和目标目录之间比较标识数据的复杂逻辑。
  • 你想要使用 Microsoft Entra 预配服务来应用 IT 托管的预配规则,以在目标目录(本地 Active Directory 或 Microsoft Entra ID)中自动创建/更新/启用/禁用帐户。

基于 Azure 逻辑应用的集成的图形。

集成方案变体

虽然本教程使用 CSV 文件作为记录系统,但你可以自定义示例 Azure 逻辑应用工作流,以从任何记录系统读取数据。 Azure 逻辑应用提供各种内置连接器托管连接器,其中包含可在集成工作流中使用的预生成触发器和操作。

下面是企业集成方案变体的列表,其中 API 驱动的入站预配可以使用逻辑应用工作流实现。

# 记录系统 有关使用逻辑应用读取源数据的集成指南
1 存储在 SFTP 服务器上的文件 使用内置 SFTP 连接器托管 SFTP SSH 连接器从 SFTP 服务器上存储的文件读取数据。
2 数据库表 如果使用 Azure SQL 服务器或本地 SQL Server,请使用 SQL Server 连接器读取表数据。
如果使用 Oracle 数据库,请使用 Oracle 数据库连接器读取表数据。
3 本地和云托管的 SAP S/4 HANA 或
经典本地 SAP 系统,例如 R/3 和 ECC
使用 SAP 连接器从 SAP 系统检索标识数据。 有关如何配置此连接器的示例,请参阅使用 Azure 逻辑应用和 SAP 连接器的常见 SAP 集成方案
4 IBM MQ 使用 IBM MQ 连接器从队列接收预配消息。
5 Dynamics 365 Human Resources 使用 Dataverse 连接器从 Microsoft Dynamics 365 Human Resources 使用的 Dataverse 表中读取数据。
6 公开 REST API 的任何系统 如果在逻辑应用连接器库中找不到记录系统的连接器,则可以创建自己的自定义连接器,从记录系统读取数据。

读取源数据后,应用预处理规则,并将记录系统中的输出转换为批量请求,该请求可发送到 Microsoft Entra 预配 bulkUpload API 终结点。

重要

如果要与社区共享 API 驱动的入站预配 + 逻辑应用集成工作流,请创建逻辑应用模板,记录使用它的步骤,并提交拉取请求以包含在 GitHub 存储库 entra-id-inbound-provisioning 中。

如何使用本教程

Microsoft Entra 入站预配 GitHub 存储库中发布的逻辑应用部署模板可自动执行多个任务。 它还具有处理大型 CSV 文件并将批量请求分块的逻辑,便于在每个请求中发送 50 条记录。 下面介绍如何根据集成要求对其进行测试和自定义。

注意

示例 Azure 逻辑应用工作流“按原样”提供,以供实现参考。 如果你有相关疑问或者想要增强它,请使用 GitHub 项目存储库

# 自动化任务 实施指南 高级自定义
1 从 CSV 文件读取辅助角色数据。 逻辑应用工作流使用 Azure 函数读取存储在 Azure 文件共享中的 CSV 文件。 Azure 函数将 CSV 数据转换为 JSON 格式。 如果你的 CSV 文件格式不同,请更新工作流步骤“分析 JSON”和“构造 SCIMUser”。 如果记录系统不同,请检查集成方案变体部分中提供的指南,了解如何使用适当的连接器自定义逻辑应用工作流。
2 预处理数据并将其转换为 SCIM 格式。 默认情况下,逻辑应用工作流会将 CSV 文件中的每条记录转换为一个 SCIM 核心用户 + 企业用户表示形式。 如果你计划使用自定义 SCIM 架构扩展,请更新步骤“构造 SCIMUser”以包含自定义 SCIM 架构扩展。 如果要运行 C# 代码以进行高级格式设置和数据验证,请使用自定义 Azure Functions
3 使用正确的身份验证方法 可以使用服务主体使用托管标识来访问入站预配 API。 使用正确的身份验证方法更新步骤“将 SCIMBulkPayload 发送到 API 终结点”。 -
4 在本地 Active Directory 或 Microsoft Entra ID 中预配帐户。 配置 API 驱动的入站预配应用。 这将生成唯一的 /bulkUpload API 终结点。 更新“将 SCIMBulkPayload 发送到 API 终结点”步骤,以使用正确的 bulkUpload API 终结点。 如果计划将批量请求与自定义 SCIM 架构一起使用,请扩展预配应用架构以包含自定义 SCIM 模式属性。
5 扫描预配日志,并重试失败记录的预配。 此自动化尚未在示例逻辑应用工作流中实现。 若要实现它,请参阅预配日志图形 API -
6 将基于逻辑应用的自动化部署到生产环境。 验证 API 驱动的预配流,并自定义逻辑应用工作流以满足要求后,即可在环境中部署自动化。 -

步骤 1:创建一个 Azure 存储帐户来托管 CSV 文件

本部分所述的步骤可选做。 如果现在已经有存储帐户,或者想要从其他源(例如 SharePoint 网站或 Blob 存储)读取 CSV 文件,请更新逻辑应用来使用所选连接器。

  1. 至少以应用程序管理员身份登录到 Azure 门户
  2. 搜索“存储帐户”并创建新的存储帐户。 显示创建新的存储帐户的屏幕截图。
  3. 分配资源组并为其命名。 资源组分配的屏幕截图。
  4. 创建存储帐户后,转到资源。
  5. 单击“文件共享”菜单选项并创建新的文件共享。 显示创建新的文件共享的屏幕截图。
  6. 验证是否已成功创建文件共享。 已创建的文件共享的屏幕截图。
  7. 使用“上传”选项将示例 CSV 文件上传到文件共享。
  8. 下面是 CSV 文件中的列的屏幕截图。 Excel 中的列的屏幕截图。

步骤 2:配置 Azure 函数 CSV2JSON 转换器

  1. 在与 Azure 门户关联的浏览器中,打开 GitHub 存储库 URL - https://github.com/joelbyford/CSVtoJSONcore

  2. 单击“部署到 Azure”链接,将此 Azure 函数部署到 Azure 租户。 显示部署 Azure 函数的屏幕截图。

  3. 指定要在其中部署此 Azure 函数的资源组。 显示配置 Azure 函数资源组的屏幕截图。

    如果收到“此区域的配额为 0 个实例”错误,请尝试选择其他区域。

  4. 确保将 Azure 函数成功部署为应用服务。

  5. 转到资源组并打开 WebApp 配置。 确保它处于“正在运行”状态。 复制与 Web 应用关联的默认域名。 Azure 函数 Web 应用域名的屏幕截图。

  6. 运行以下 PowerShell 脚本,以测试 CSVtoJSON 终结点是否按预期工作。 在脚本中为变量 $csvFilePath$uri 设置正确的值。

    # Step 1: Read the CSV file 
    $csvFilePath = "C:\Path-to-CSV-file\hr-user-data.csv" 
    $csvContent = Get-Content -Path $csvFilePath 
    
    # Step 2: Set up the request 
    $uri = "https://az-function-webapp-your-domain/csvtojson" 
    $headers = @{ 
         "Content-Type" = "text/csv" 
    } 
    $body = $csvContent -join "`n"  # Join the CSV lines into a single string 
    
    # Step 3: Send the POST request 
    $response = Invoke-WebRequest -Uri $uri -Method POST -Headers $headers -Body $body 
    
    # Output and format the JSON response 
    $response.Content | ConvertFrom-JSON | ConvertTo-JSON 
    
  7. 如果 Azure 函数部署成功,则脚本的最后一行将输出 CSV 文件的 JSON 版本。

    Azure 函数响应的屏幕截图。

  8. 若要允许逻辑应用调用此 Azure 函数,请在 WebApp 的 CORS 设置中输入星号 (*) 并“保存”配置。 Azure 函数 CORS 设置的屏幕截图。

步骤 3:配置 API 驱动的入站用户预配

步骤 4:配置 Azure 逻辑应用工作流

  1. 单击以下按钮,为 CSV2SCIMBulkUpload 逻辑应用工作流部署 Azure 资源管理器模板。

    部署到 Azure

  2. 在“实例详细信息”下,更新突出显示的项,复制粘贴前面步骤中的值。 Azure 逻辑应用实例详细信息的屏幕截图。

  3. 对于 Azurefile_access Key 参数,请打开 Azure 文件存储帐户,并复制“安全性和网络”下的访问密钥。
    Azure 文件访问密钥的屏幕截图。

  4. 单击“查看并创建”选项以开始部署。

  5. 部署完成后,会看到以下消息。 显示 Azure 逻辑应用部署完成的屏幕截图。

步骤 5:配置系统分配的托管标识

  1. 访问逻辑应用工作流的“设置”->“标识”边栏选项卡。
  2. 启用“系统分配的托管标识”。 启用托管标识的屏幕截图。
  3. 系统会提示你确认使用托管标识。 单击“是”。
  4. 向托管标识授予执行批量上传的权限

步骤 6:查看和调整工作流步骤

  1. 在设计器视图中打开逻辑应用。 Azure 逻辑应用设计器视图的屏幕截图。

  2. 查看工作流中每个步骤的配置,确保其正确。

  3. 打开“使用路径获取文件内容”步骤,并更正它以浏览到租户中的 Azure 文件存储。 显示获取文件内容的屏幕截图。

  4. 如果需要,请更新连接。

  5. 确保“将 CSV 转换为 JSON”步骤指向正确的 Azure 函数 Web 应用实例。 显示 Azure 函数调用从 CSV 转换为 JSON 的操作的屏幕截图。

  6. 如果 CSV 文件内容/标头不同,请使用可从对 Azure 函数的 API 调用中检索到的 JSON 输出更新“分析 JSON”步骤。 使用步骤 2 中的 PowerShell 输出。 “分析 JSON”步骤的屏幕截图。

  7. 在“构造 SCIMUser”步骤中,确保 CSV 字段正确映射到将用于处理的 SCIM 属性。

    构造 SCIM”用户步骤的屏幕截图。

  8. 在“将 SCIMBulkPayload 发送到 API 终结点”步骤中,请确保使用正确的 API 终结点和身份验证机制。

    显示使用托管标识调用批量上传 API 的屏幕截图。

步骤 7:运行触发器并测试逻辑应用工作流

  1. 在逻辑应用设计器的“正式发布”版本中,单击“运行触发器”以手动执行工作流。 显示运行逻辑应用的屏幕截图。
  2. 执行完成后,请查看逻辑应用在每次迭代中执行的操作。
  3. 在最终迭代中,应会看到逻辑应用将数据上传到入站预配 API 终结点。 查找 202 Accept 状态代码。 可复制粘贴并验证批量上传请求。 逻辑应用执行结果的屏幕截图。

后续步骤