从 Java 代码中搜索 Keycloak 中的用户
Posted
技术标签:
【中文标题】从 Java 代码中搜索 Keycloak 中的用户【英文标题】:Searching users in Keycloak from Java code 【发布时间】:2020-09-20 18:22:39 【问题描述】:我正在使用 Spring Boot、Keycloak 10、java 8 和 keycloak-admin-client jar。我能够获取用户、他的组和角色。
在搜索方面,我可以看到不同的搜索方法选项:
List<UserRepresentation> search = getKeycloakInstance().realm("my-realm").users()
.search("username");
https://www.keycloak.org/docs-api/10.0/javadocs/org/keycloak/admin/client/resource/UsersResource.html
但我需要做的是编写几个方法:
按角色搜索(因此搜索具有某些角色的用户)
按组和组属性搜索
以“包含”方式按文本(名字、姓氏、电子邮件)搜索:mytext
按角色和文本搜索
按 id 列表搜索(用户的 uuid)
我没有在 keycloak-admin-client 中看到这种可能性,或者我应该使用什么来代替 keycloak-admin-client ?
【问题讨论】:
您可能需要针对 keycloak API 构建自定义代码:keycloak.org/docs-api/10.0/rest-api/index.html 【参考方案1】:不幸的是,keycloak-admin-client 没有提供很多搜索选项。
如何按角色查找用户:
RoleResource roleResource = getKeycloakInstance().realm("realm_name")
.roles().get("role_name");
roleResource.getRoleUserMembers();
如何查找群组中的所有用户:
getKeycloakInstance().realm("realm_name").groups().group("your_group").members();
如何通过用户名、名字、姓氏、电子邮件查找用户:
getKeycloakInstance().realm("my-realm").users()
.search("username", "lastName", "email");
如果您没问题,请尝试使用Keycloak Admin REST API 以获得更多搜索机会。
【讨论】:
谢谢,按 userIds 搜索呢?至于组和角色,我将不得不使用几个请求来一次搜索具有 xt、角色和组的用户。 Rest API 本身也没有像我看到的那样提供这样的机会,所以我将继续使用 admin-client jar。 我刚刚检查了搜索实现 (github.com/keycloak/keycloak/blob/master/services/src/main/java/…)。无法通过属性的多个值进行搜索。您只能按一个 id、名称、角色等进行搜索。例如按“lastName”搜索:search("lastName:mar", 0, 10) 将返回姓氏包含“mar”的前 10 个用户。如果您将部分用户数据存储在您的应用数据库中并且它与 keycloak 数据库同步,我建议您对您的应用数据库执行搜索以更加灵活。 我有过使用 Keycloak 的商业经验,我不能说我印象深刻。我们将用户数据存储在 Keycloak 中,但决定在我们的应用程序数据库中复制数据,以便能够执行灵活的用户搜索。这种方法的坏处是我们需要在两个 DB 中同步用户数据。以上是关于从 Java 代码中搜索 Keycloak 中的用户的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java API 从 keycloak 获取用户的名字、姓氏和属性?