我们使用WSO2 SCIM为用户定义角色并对其进行更新。对于角色更新操作,我们目前正在添加新的用户角色(使用SCIM将用户添加到新的角色组),然后删除现有的用户角色(调用一个组下的用户请求,从列表中删除现有用户,并使用新创建的列表作为正文参数来调用该组的SCIM 修补程序请求)。通过这种方法,我们能够更新角色。但随着用户数的增加,修补程序操作的上述方法出现超时错误(新角色被更新为用户,但当第二个api失败时,现有角色仍然存在)。
下面是我尝试过的一个解决方案:
添加新角色,删除用户详细信息中新创建的角色,并使用更新的用户角色调用修补程序api。但是经过进一步的研究发现,用户内部的角色是只读的,不能使用补丁/put操作进行更新。所以我没能找到合适的解决方案。
有没有一种方法可以在不使用修补程序/Groups端点的情况下更新组内单个用户的角色?
发布于 2021-01-26 21:32:54
正如我在答案https://stackoverflow.com/a/64225419/10055162中提到的,SCIM规范不允许使用PATCH /Users/{userId}
更新用户的组属性。
此外,当组成员计数过高时,PATCH /Groups/{groupId}
可能会导致性能问题。
WSO2在一定程度上提高了PATCH /Groups/{groupId}
的性能。
因此,如果您使用的是一个旧版本的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",
"value": {
"members": [
{
"display": "anuradha",
"value": "db15b161-a205-454d-9da1-4a2a0df0585e"
}
]
}
}
]
},
"method": "PATCH",
"path": "/Groups/8c91215f-1b7a-4cdb-87d9-ae29c60d70de"
}
],
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:BulkRequest"
]
}
https://stackoverflow.com/questions/65887494
复制相似问题