我已经编写了一个符合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"
}
]
}
SCIM协议“声明”属性active
接受布尔值(https://www.rfc-editor.org/rfc/rfc7643#section-4.1.1),因此遵循PATCH协议(https://www.rfc-editor.org/rfc/rfc6902#section-4.3),我期望布尔值而不是内部写入布尔值的字符串,因此期望的请求如下:
PATCH /Users/:id
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:PatchOp"
],
"Operations": [
{
"op": "Replace",
"path": "active",
"value": false
}
]
}
所以问题是给定的值"False"
应该是false
。
这是Azure的bug还是我遗漏了什么?如果是bug,我应该尝试解析字符串并最终提取布尔值吗?但如果我这样做,我将超出标准。您是如何处理这个问题的?
2条答案
按热度按时间deyfvvtc1#
我还花了很多时间试图弄清楚Azure是否符合SCIM规范,答案是它们不符合。
它们为PATCH请求发送的默认值实际上是字符串,而不是
User
JSON模式定义的布尔值。您可以通过以下方式覆盖发送/Map到SCIM架构中的值:
1.进入您的资源调配应用程序
Synchronize Azure Active Directory Users to customappsso
(此处的名称在您的目录中可能不同)1.查找
Switch([IsSoftDeleted], "False", "True", "True", "False")
1.替换为
Switch([IsSoftDeleted], false, true, true, false)
1.点击OK并保存
注意,保存后仍会看到布尔值周围的引号,但PATCH请求将被正确发送。
参见参考x1c 0d1xx 1c 1d 1xx 1c 2d 1x的屏幕截图
js81xvg62#
使用required SCIM schema的SCIM isn't fully compliant的默认Azure实现。
我发现我可以使用默认的NOT([IsSoftDeleted]),通过使用微软的工作区,它的目标是SCIM兼容补丁操作(返回布尔值而不是字符串的'active'属性)。
这可以通过在租户url输入后附加URL参数**?aadOptscim062020**来实现。