Azure User/Group 配置布尔值的 SCIM 问题

Azure User/Group provisioning with SCIM problem with boolean values

我已经编写了一个符合 SCIM 标准 (https://www.rfc-editor.org/rfc/rfc7644) 的应用程序,但与 Azure 集成后我发现它无法更新 一个用户,如果它是已禁用,Azure 发送的请求如下:

PATCH /Users/:id
{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "Operations": [
        {
            "op": "Replace",
            "path": "active",
            "value": "False"
        }
    ]
}

属性 active 接受布尔值 (https://www.rfc-editor.org/rfc/rfc7643#section-4.1.1), so following the PATCH protocol (https://www.rfc-editor.org/rfc/rfc6902#section-4.3) 的 SCIM 协议“sais” 我期望一个布尔值而不是一个在其中写入布尔值的字符串,因此预期的请求是以下:

PATCH /Users/:id
{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "Operations": [
        {
            "op": "Replace",
            "path": "active",
            "value": false
        }
    ]
}

所以问题是给定的值"False"应该是false.

这是 Azure 的错误还是我遗漏了什么?如果它是一个错误,我应该尝试解析字符串并最终提取一个布尔值吗?但如果我那样做,我就会不合标准。你是如何解决这个问题的?

我也花了很多时间试图弄清楚 Azure 是否符合 SCIM 规范,答案是不符合。

他们为 PATCH 请求发送的默认值确实是字符串,而不是 User JSON 模式定义的布尔值。

您可以通过以下方式覆盖 send/mapped 进入 SCIM 模式的值:

  1. 进入您的配置应用程序
  2. 映射 > Synchronize Azure Active Directory Users to customappsso(此处的名称在您的目录中可能不同)
  3. 查找Switch([IsSoftDeleted], "False", "True", "True", "False")
  4. 替换为Switch([IsSoftDeleted], false, true, true, false)
  5. 点击确定并保存

请注意,保存后它仍会看到布尔值周围的引号,但 PATCH 请求将被正确发送。

查看截图以供参考