我有一个KC实例,其中有一些客户端启用了Authorization
选项。所有这些都很好,但作为客户端,我需要以下特定信息:给定具有特定范围的特定资源,我需要访问该资源的用户列表。
我已经对可用的API进行了多次探索,但都没有成功。是否有获得此信息的方法,或者我是否需要使用专用的SPI扩展KC功能?
发布于 2022-11-28 18:42:19
不幸的是你不能。Keycloak授权机制只有在有输入时才会进行检查。这里,您的输入是用户。要做到这一点,你必须要求所有的用户。这是不实用的bcz,可能有上千个用户。
资源服务器(提供受保护资源的应用程序或服务)通常依赖于某种类型的信息来决定是否应该授予对受保护资源的访问权限。对于基于RESTful的资源服务器,该信息通常是从安全令牌获取的,通常作为承载令牌发送给服务器的每个请求。对于依赖会话对用户进行身份验证的web应用程序,该信息通常存储在用户的会话中,并为每个请求
从其中检索
发布于 2022-11-28 19:10:52
通过可以找到特定资源的所有用户。
这一步
我使用的是Keycloak v18.0.2 (如果使用v19/v20,只需删除API端点中的auth
)
#1获取特定的客户端uuid
GET {keycloak_url}/auth/admin/realms/{realm}/clients/{client-uuid}
#2获取特定资源uuid
GET {keycloak_url}/auth/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/resource/{resource-uuid}
#3获得#2的特别许可
GET {keycloak_url}/auth/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/resource/{resource-uuid}/permissions
4获取策略3获取策略和权限列表
GET {keycloak_url}/auth/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/policy
获得特定许可的政策
GET {keycloak_url}/auth/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/policy/{permission-uuid}/associatedPolicies
5获取#4的用户列表
GET {keycloak_url}/auth/admin/realms/{realm}/clients/{client-uuid}/authz/resource-server/policy/{policy-uuid}
用户列表将在响应体中返回。
{
"id": {policy-uuid},
"name": {policy-name},
"config": {
"users": "[array of {user-uuid}]"
}
}
UI演示
我将在resource1
of my-test
客户机中找到所有用户。
它分析了permission1
permissions1
应用policy1
policy
的两个用户
API演示
同一步骤的API
查找客户端uuid
查找特定资源uuid
获取特定资源
获取权限和策略列表
获取相关策略以获取权限
获取策略的用户列表
该用户uuid匹配的用户列表
所以你可以找到resource1
的用户是user1
和user3
。
https://stackoverflow.com/questions/74603719
复制相似问题