教程:验证 SCIM 终结点

本教程介绍如何使用 Microsoft Entra SCIM 验证程序来验证预配服务器是否与 Azure SCIM 客户端兼容。 本教程适用于希望生成 SCIM 兼容服务器以使用 Microsoft Entra 预配服务来管理标识的开发人员。

在本教程中,你将了解如何执行以下操作:

  • 选择测试方法
  • 配置测试方法
  • 验证 SCIM 终结点

先决条件

选择测试方法

第一步是选择一种测试方法来验证 SCIM 终结点。

  1. 打开 Web 浏览器并导航到 SCIM 验证程序:https://scimvalidator.microsoft.com/

  2. 选择三个测试选项之一。 可以使用默认特性、自动发现架构或上传架构。

    “SCIM 验证程序”主页的屏幕截图。

使用默认特性 - 系统提供默认特性,你可以根据需要对其进行修改。

发现架构 - 如果你的终结点支持 /Schema,此选项会让工具发现支持的特性。 建议使用此选项,因为它可以减少生成应用时更新应用的开销。

上传 Microsoft Entra 架构 - 在 Microsoft Entra ID 上上传从示例应用下载的架构。

配置测试方法

选择一种测试方法后,下一步是对其进行配置。

“SCIM 验证程序特性”页面的屏幕截图。

  1. 如果使用默认特性选项,请填写所有指示字段。
  2. 如果使用发现架构选项,请输入 SCIM 终结点 URL 和令牌。
  3. 如果要上传架构,请选择要上传的 .json 文件。 该选项接受从 Microsoft Entra 管理中心的示例应用导出的 .json 文件。 若要了解如何导出架构,请参阅操作说明:导出预配配置并回退到已知良好状态

注意

若要测试“组特性”,请确保选择“启用组测试”

  1. 使用特性列表末尾的“添加特性”选项和页面右侧的减号 (-),根据需要为用户和组类型编辑列表特性。
  2. 从用户和组特性列表中选择联接属性。

注意

联接属性(又称为匹配特性)是用户和组资源在源中可以唯一查询并在目标系统中可以唯一匹配的特性。

验证 SCIM 终结点

最后,需测试和验证终结点。

  1. 选择“测试架构”开始测试。

  2. 查看结果,其中包含已通过测试和已失败测试的摘要。

  3. 选择“显示详细信息”选项卡,查看并修复问题。

  4. 继续测试架构,直到所有测试全部通过。

    “SCIM 验证程序结果”页面的屏幕截图。

记录由 SCIM 验证器执行的验证

创建新用户

  • POST /Users – 创建具有完整 JSON 有效负载的新用户。
    • 终结点返回 HTTP 201
    • POST 响应包含已创建的用户 ID
  • GET /Users?filter={joiningProperty} eq “value” – 通过筛选联接属性来验证创建。
    • GET 返回已创建的用户
    • GET 返回的值与 POST 请求传递的值匹配(根据终结点而异)
  • DELETE /Users - 清理测试用户。 -仅当支持硬删除时调用

创建重复用户

  • POST /Users – 尝试使用与现有用户相同的有效负载(具有相同的唯一/连接属性)创建用户。
    • 在第一次创建请求时返回 HTTP 201
    • 第二次创建请求时返回 HTTP 409

添加属性

  • POST /Users - 创建用户资源
    • HTTP 2xx 成功
  • PATCH /Users/{id} - 使用 JSON Patch 文档(添加操作)插入其他非必需属性。
  • GET /Users?filter={joiningProperty} eq “value” – 检索用户以验证添加的属性。
    • 用户被返回
    • 插入的属性现在存在于用户身上

替换用户属性

  • POST /Users - 创建用户资源
    • HTTP 2xx 成功
  • PATCH /Users/{id},发送 JSON 补丁文档(使用替换操作)更新一个或多个属性。
  • GET /Users?filter={joiningProperty} eq “value” – 验证更新的属性是否已正确应用。
    • 用户被返回
    • 更新的属性在用户上存在

更新联接属性

  • POST /Users - 创建用户资源
    • HTTP 2xx 成功
  • PATCH /Users/{id} - 使用 JSON 补丁文件更新加入属性(例如 userName)。
  • GET /Users?filter={joiningProperty} eq “newValue” – 确认联接属性已更新。
    • 用户的联接属性已更新

将活动属性更新为 False

  • POST /Users/ - 基于架构创建资源
    • HTTP 2xx 成功
    • 应在 GET 请求时返回被禁用的用户
  • PATCH /Users/{id} - 发出 JSON Patch 文档,将“active”属性设为 false。
    • HTTP 2xx 成功
  • GET /Users?filter={joiningProperty} eq “value” – 检索用户以确认活动属性现在为 false。
    • 用户记录中返回的 ACTIVE 应为 FALSE。

创建新组

  • POST /Groups – 创建具有完整 JSON 有效负载的新组。
    • 终结点返回 HTTP 201
    • POST 响应包含创建的组 ID
  • GET /Group?filter={joiningProperty} eq “value” – 通过筛选联接属性来验证创建。
    • GET 返回创建的组
    • GET 返回的值与 POST 请求传递的值匹配(根据终结点而异)
  • DELETE /Groups - 清理测试用户。
    • 仅当支持硬删除时调用

创建重复组

  • POST /Groups – 尝试使用与现有组相同的有效负载(具有相同唯一/联接属性)创建组。
    • 在第一次创建请求时返回 HTTP 201
    • 第二次创建请求时返回 HTTP 409

更新组属性

  • POST /Groups - 创建新的组资源以更新属性
    • POST 返回 HTTP 2xx
  • PATCH /Groups/{id} - 发送使用替换操作的 JSON 补丁文档,以更新现有组的一个或多个属性(不包括成员)。
    • PATCH 返回成功 (HTTP 2xx)
  • GET /Groups/filter={joiningProperty} eq "value" – 确认组的属性已正确更新。
    • GET 返回修补组
    • 返回群组的属性与 PATCH 请求中已更改的属性一致匹配

创建新组资源

  • POST /Groups - 创建要向其添加成员的新组资源
    • POST 返回 HTTP 2xx
  • POST /Users – 创建要用作组成员的新用户资源。
    • POST 返回 HTTP 2xx
  • PATCH /Groups/{id} – 使用 JSON Patch 文档将新创建的用户标识符添加到组。
    • PATCH 返回成功

在 SCIM 验证程序上使用表达式

SCIM 验证程序支持使用表达式,为属性生成所需的值。

如何使用表达式

  1. 转到“属性”页面。
  2. 在要自定义的属性的列中输入所需的表达式。
  3. 运行测试

注意

这些表达式适用于“用户”和“组”属性。

可用表达式

下表列出了可用表达式

表达式 含义 示例 结果
generateRandomString {字符串字符计数} 生成具有指定的字母字符数的随机字符串 {%generateRandomString 6%}@contoso.com CXJHYP@contoso.com
generateRandomNumber {Count of Numbers} 生成具有指定位数的随机数 {%generateRandomNumber 4%} 8821
generateAlphaNumeric {字符数} 使用字母和数字混合生成随机字符串,其中包含指定的字符数 {%generateAlphaNumeric 7%} 59Q2M9W
generateAlphaNumericWithSpecialCharacters {字符数量} 根据指定的字符数,生成包含字母、数字和特殊字符组合的随机字符串 {%generateAlphaNumericWithSpecialCharacters 8%}测试 D385N05’TEST

可以在表达式之前或之后添加值,以实现所需的结果,例如,将 {% generateRandomString 6 %}@contoso.com 添加到 userName 属性的值字段时,每次测试都会生成一个新的 userName 值,而保留 contoso.com 域。

清理资源

如果在测试中创建了任何不再需要的 Azure 资源,请记得将其删除。

Microsoft Entra SCIM 验证程序的已知问题

  • 尚不支持软删除(禁用)。
  • 时区格式随机生成,且会因系统尝试对其进行验证而失败。
  • patch user remove 特性可能会尝试删除某些系统的必需/所需特性。 应忽略此类故障。

后续步骤