使用 cURL 进行 API 驱动的入站预配快速入门

简介

cURL 是 API 开发人员常用的免费开源命令行工具,默认在 Windows 10/11 上提供。 本教程介绍如何使用 cURL 快速测试 API 驱动的入站预配

先决条件

将用户数据上传到入站预配 API

  1. 检索有权访问入站预配 API 的服务主体的 client_id 和 client_secret。
  2. 使用 OAuth client_credentials 授予流获取访问令牌。 将变量 [yourClientId][yourClientSecret][yourTenantId] 替换为适用于设置的值,然后运行以下 cURL 命令。 复制生成的访问令牌值
    curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=[yourClientId]&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret=[yourClientSecret]&grant_type=client_credentials" "https://login.microsoftonline.com/[yourTenantId]/oauth2/v2.0/token"
    
  3. 复制使用 SCIM 企业用户架构的批量请求,并将内容保存在名为 scim-bulk-upload-users.json 的文件中。
  4. 将变量 [InboundProvisioningAPIEndpoint] 替换为与预配应用关联的预配 API 终结点。 使用上一步中的 [AccessToken] 值并运行以下 curl 命令,将批量请求上传到预配 API 终结点。
    curl -v "[InboundProvisioningAPIEndpoint]" -d @scim-bulk-upload-users.json -H "Authorization: Bearer [AccessToken]" -H "Content-Type: application/scim+json"
    
  5. 成功上传后,你将收到 HTTP 202 已接受响应代码。
  6. 预配服务会立即开始处理批量请求有效负载,你可以通过访问入站预配应用的预配日志来查看预配详细信息。

确认批量请求有效负载的处理情况

  1. 至少以应用程序管理员的身份登录到 Microsoft Entra 管理中心

  2. 浏览到“Microsoft Entra ID”->“应用程序”->“企业应用程序”。

  3. 在所有应用程序下,使用搜索筛选器文本框查找并打开 API 驱动的预配应用程序。

  4. 打开“预配”边栏选项卡。 登陆页面会显示上次运行的状态。

  5. 单击“查看预配日志”打开预配日志边栏选项卡。 或者,可以单击菜单选项“监视”->“预配日志”。

    Screenshot of provisioning logs in menu.

  6. 单击预配日志中的任何记录以查看更多处理详细信息。

  7. 预配日志详细信息屏幕显示为特定用户执行的所有步骤。

    • 在“从 API 导入”步骤下,查看从批量请求中提取的用户数据的详细信息。
    • “匹配用户”步骤显示基于匹配标识符的任何用户匹配的详细信息。 如果有用户匹配,则预配服务将执行更新操作。 如果没有用户匹配,则预配服务将执行创建操作。
    • “确定用户是否在范围内”步骤显示范围筛选器评估的详细信息。 默认情况下,将处理所有用户。 如果已设置范围筛选器(例如,仅处理属于销售部门的用户),则此步骤将显示范围筛选器的评估详细信息。
    • “预配用户”步骤会调用最终处理步骤和应用于用户帐户的更改。
    • 使用“修改的属性”选项卡可以查看属性更新。

附录

查看此部分,了解有关 SCIM 企业用户架构批量请求的信息。

使用 SCIM 企业用户架构的批量请求

下面显示的批量请求使用 SCIM 标准核心用户和企业用户架构。

请求正文

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:BulkRequest"],
    "Operations": [
    {
        "method": "POST",
        "bulkId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
        "path": "/Users",
        "data": {
            "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
            "externalId": "701984",
            "userName": "bjensen@example.com",
            "name": {
                "formatted": "Ms. Barbara J Jensen, III",
                "familyName": "Jensen",
                "givenName": "Barbara",
                "middleName": "Jane",
                "honorificPrefix": "Ms.",
                "honorificSuffix": "III"
            },
            "displayName": "Babs Jensen",
            "nickName": "Babs",
            "emails": [
            {
              "value": "bjensen@example.com",
              "type": "work",
              "primary": true
            }
            ],
            "addresses": [
            {
              "type": "work",
              "streetAddress": "100 Universal City Plaza",
              "locality": "Hollywood",
              "region": "CA",
              "postalCode": "91608",
              "country": "USA",
              "formatted": "100 Universal City Plaza\nHollywood, CA 91608 USA",
              "primary": true
            }
            ],
            "phoneNumbers": [
            {
              "value": "555-555-5555",
              "type": "work"
            }
            ],
            "userType": "Employee",
            "title": "Tour Guide",
            "preferredLanguage": "en-US",
            "locale": "en-US",
            "timezone": "America/Los_Angeles",
            "active":true,
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
                 "employeeNumber": "701984",
                 "costCenter": "4130",
                 "organization": "Universal Studios",
                 "division": "Theme Park",
                 "department": "Tour Operations",
                 "manager": {
                     "value": "89607",
                     "displayName": "John Smith"
                 }
            }
        }
    },
    {
        "method": "POST",
        "bulkId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
        "path": "/Users",
        "data": {
            "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User",
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
            "externalId": "701985",
            "userName": "Kjensen@example.com",
            "name": {
                "formatted": "Ms. Kathy J Jensen, III",
                "familyName": "Jensen",
                "givenName": "Kathy",
                "middleName": "Jane",
                "honorificPrefix": "Ms.",
                "honorificSuffix": "III"
            },
            "displayName": "Kathy Jensen",
            "nickName": "Kathy",
            "emails": [
            {
              "value": "kjensen@example.com",
              "type": "work",
              "primary": true
            }
            ],
            "addresses": [
            {
              "type": "work",
              "streetAddress": "100 Oracle City Plaza",
              "locality": "Hollywood",
              "region": "CA",
              "postalCode": "91618",
              "country": "USA",
              "formatted": "100 Oracle City Plaza\nHollywood, CA 91618 USA",
              "primary": true
            }
            ],
            "phoneNumbers": [
            {
              "value": "555-555-5545",
              "type": "work"
            }
            ],
            "userType": "Employee",
            "title": "Tour Lead",
            "preferredLanguage": "en-US",
            "locale": "en-US",
            "timezone": "America/Los_Angeles",
            "active":true,
            "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
                 "employeeNumber": "701985",
                 "costCenter": "4130",
                 "organization": "Universal Studios",
                 "division": "Theme Park",
                 "department": "Tour Operations",
                 "manager": {
                     "value": "701984",
                     "displayName": "Barbara Jensen"
                 }
            }
        }
    }
],
    "failOnErrors": null
}

后续步骤