从 Java 代码在 Keycloak 中搜索用户

mic*_*tmi 5 java spring-boot keycloak

我正在使用 Spring Boot、Keycloak 10、java 8 和 keycloak-admin-client jar。我能够获得用户、他的组和角色。

在搜索方面,我看到不同的搜索方法选项,例如我可以:

 List<UserRepresentation> search = getKeycloakInstance().realm("my-realm").users()
                .search("username");
Run Code Online (Sandbox Code Playgroud)

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 ?

Yul*_*iaZ 5

不幸的是,keycloak-admin-client 没有提供很多搜索选项。

如何按角色查找用户:

RoleResource roleResource = getKeycloakInstance().realm("realm_name")
                          .roles().get("role_name");  
roleResource.getRoleUserMembers();
Run Code Online (Sandbox Code Playgroud)

如何查找组中的所有用户:

getKeycloakInstance().realm("realm_name").groups().group("your_group").members();
Run Code Online (Sandbox Code Playgroud)

如何通过用户名、名字、姓氏、电子邮件查找用户:

getKeycloakInstance().realm("my-realm").users()
            .search("username", "lastName", "email");
Run Code Online (Sandbox Code Playgroud)

如果没问题,请尝试使用Keycloak Admin REST API来获得更多搜索机会。

  • 我刚刚检查了搜索实现(https://github.com/keycloak/keycloak/blob/master/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java)。无法通过属性的多个值进行搜索。您只能通过一个 ID、姓名、角色等进行搜索。例如,按“lastName”搜索:search(“lastName:mar”, 0, 10) 将返回姓氏包含“mar”的前 10 个用户。如果您将部分用户数据存储在应用程序数据库中并且与 keycloak 数据库同步,我建议您在应用程序数据库上执行搜索以更加灵活。 (2认同)