如何在不使用补丁/组的情况下使用 WSO2 SCIM REST API 更新单个用户的组,因为当用户计数很高时会导致超时?

问题描述

我们正在使用 WSO2 SCIM apis 来定义用户角色并更新它。 对于角色更新操作,我们目前正在添加新用户角色(使用SCIM api将用户添加到新角色组),然后删除现有用户角色(在一个组下调用用户SCIM GET请求,删除列表中的现有用户,并使用新创建的列表作为主体参数来调用 GROUP 的 SCIM PATCH 请求)。通过这种方法,我们能够更新角色。但是随着用户群的增加,上述PATCH操作方法出现超时错误。(新角色更新为用户,但现有角色仍然存在,因为第二个api失败)。 >

以下是我尝试过的一种解决方案:

添加新角色,删除用户详细信息中新创建的角色,并使用更新后的用户角色调用 PATCH api。但后来在进一步调查中意识到用户内部的角色是只读的,不能使用补丁/放置操作更新。所以我没能找到合适的解决方案。

有没有办法在不使用 PATCH /Groups 端点的情况下更新 GROUP 内单个用户的角色?

解决方法

正如我在答案 https://stackoverflow.com/a/64225419/10055162 中提到的,SCIM 规范不允许使用 PATCH /Users/{userId} 更新用户的组属性。

此外,当群组成员数量过多时,PATCH /Groups/{groupId} 可能会导致性能问题。

WSO2 IS 在一定程度上提升了 PATCH /Groups/{groupId} 的性能。

  1. https://github.com/wso2/product-is/issues/6918 - 5.10.0 以后可用
  2. https://github.com/wso2/product-is/issues/9120 - 5.11.0 以后可用

因此,如果您使用的是旧版本的 IS,请尝试使用最新的 GA 版本 (5.11.0)。它可能会提高性能。


更新:

您可以使用 SCIM POST /Bulk 端点通过单个 REST 调用更新用户组,而不是通过多个 PATCH /Groups/{group-id} 调用。 有关批量端点的更多详细信息,请参阅 https://anuradha-15.medium.com/scim-2-0-bulk-operation-support-in-wso2-identity-server-5-10-0-8041577a4fe3

示例: 要将两个组(Group1 和 Group2)分配给用户,请使用类似于以下内容的负载执行 POST https://<host>:<port>/scim2/Bulk

{
    "Operations": [
        {
            "data": {
                "Operations": [
                    {
                        "op": "add","value": {
                            "members": [
                                {
                                    "display": "anuradha","value": "db15b161-a205-454d-9da1-4a2a0df0585e"
                                }
                            ]
                        }
                    }
                ]
            },"method": "PATCH","path": "/Groups/f707b6cc-91f8-4b8a-97fb-a01c2a79515c"
        },{
            "data": {
                "Operations": [
                    {
                        "op": "add","path": "/Groups/8c91215f-1b7a-4cdb-87d9-ae29c60d70de"
        }
    ],"schemas": [
        "urn:ietf:params:scim:api:messages:2.0:BulkRequest"
    ]
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...