我根据他们的文档中列出的示例实现了 SCIM 2.0 与 Okta 的集成。
但是,我们收到了意外的用例请求。如果 Okta 发现用户已存在但已停用,我们会收到一个对
/Users/{id}
端点的请求,其负载如下:
{
"totalResults": 1,
"startIndex": 1,
"itemsPerPage": 1,
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"resources": [
{
"name": {
"formatted": "John Does"
},
"emails": [
{
"value": "[email protected]",
"primary": true
}
],
"externalId": "113",
"active": true,
"id": "113",
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
]
}
],
"Resources": [
{
"name": {
"formatted": "John Does"
},
"emails": [
{
"value": "[email protected]",
"primary": true
}
],
"externalId": "113",
"active": true,
"id": "113",
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"natsRole": "nats/v1"
}
],
"active": false
}
此请求的 payload 使用架构
urn:ietf:params:scim:api:messages:2.0:ListResponse
。由于 URL 模式要求对一个用户进行更新,这似乎可能是 Okta 方面的一个错误,但我想知道这是否是 SCIM 规范的一部分,或者我们是否由于配置错误而从 Okta 收到此调用(我将其设置为仅支持推送新用户和推送配置文件更新)。
这是一个错误还是设计使然?如果是,Spring Boot 控制器集成是否需要接受可能是两种模式类型之一的动态 RequestBody?
如果您是 SCIM 服务器/服务提供商,而 Okta 是 SCIM 客户端,并且引用的 JSON 负载来自 Okta 的 SCIM 客户端 - 那么 Okta 的 SCIM 客户端不正确。 ListResponse 结构仅用于来自 SCIM 服务提供商的某些响应,绝不用于来自客户端的请求。