我们将 Keycloak 用于 SSO 目的,特别是我们可以使用 REST API /admin/realms/{realm}/users
来获取 Keycloak 领域中的基本用户详细信息,我们得到的响应是 UserRepresentation,它似乎也提供了 realmRoles 和 clientRoles ,但默认情况下它们不是必需的/错误的。
我们有一个获取所有用户的角色的新要求,我看到有额外的 API 公开来获取这些角色:/auth/admin/realms/realm/users/user-id/role-mappings/realm/
,但这意味着触发另一个请求,如果我们有 2k 个用户,则意味着还有 2k 个请求。
我的问题是,由于UserRepresentation也具有属性realmRoles和clientRoles,但默认情况下似乎是可选的,如何在触发请求/admin/realms/{realm}/users
时启用这些属性,并避免获取角色的额外请求。
最佳答案
恐怕在一次请求中获取你需要的数据是不可能的:仅仅通过查看获取 UsersResource 中所有用户的源代码您可以看到 realmRoles
和 clientRoles
从未被填充。
话虽如此,您可以做一件事 - 编写自己的 REST Resource by implementing SPI 。事实上,过去我在团体资源方面也遇到过类似的问题,最后我编写了自己的资源。在这种情况下,您只需要使用一种方法编写自定义资源 - 让所有用户都具有角色。您只需复制粘贴当前的 keycloak 逻辑并添加额外的位或扩展内置的 UsersResource。然而,这并不是一个单一的要点 - 从长远来看,您将需要维护自己的代码,并且如果某些界面发生变化,升级到最新的 keycloak 可能不会那么简单。
关于java - 如何使用 keycloak Rest api 为用户获取更多/可选数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56301410/