Keycloak - 将所有用户映射到角色

时间:2016-07-14 10:35:06

标签: keycloak keycloak-services

我知道keycloak暴露在api下面,

<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-services</artifactId>
    <version>2.0.0.Final</version>
</dependency>

使用完整的文档here。我在这里找不到所需的api来获取具有映射到它们的特定角色的所有用户。

问题陈述 - 我需要从具有特定角色的keycloak服务器中挑选所有用户。我需要向所有用户发送电子邮件,并将角色映射到他们。

5 个答案:

答案 0 :(得分:5)

有一位杰出的feature request通过API要求此功能。

与此同时,如果您的要求是一次性的,您可以通过询问加入KEYCLOAK_ROLE到USER_ROLE_MAPPING到USER_ENTITY

的数据库来获取用户名(或电子邮件地址)。

类似的东西:

SELECT username
FROM keycloak_role kr 
   JOIN user_role_mapping rm ON kr.id = rm.role_id
   JOIN user_entity ue ON rm.user_id = ue.id
WHERE kr.name = 'your_role_name';

答案 1 :(得分:1)

基于documentation,它似乎是以下API:

GET /{realm}/clients/{id}/roles/{role-name}/users

有一段时间了。但是,在此旧版本中,用这种方法不可能获得超过100个用户。稍后修复,并增加了分页的可能性。

答案 2 :(得分:1)

这是另一个有趣的查询,它还会显示其他有用的字段。

SELECT kr_role.REALM_ID 'Realm', cl.CLIENT_ID 'Realm Client', 
    kr_role.NAME 'Role Name', 
    kr_role.DESCRIPTION 'Role Description', 
    user_ent.USERNAME 'Domain ID', user_ent.EMAIL 'Email'
  FROM keycloak_role kr_role, user_role_mapping role_map, 
    user_entity user_ent, client cl
  WHERE role_map.USER_ID = user_ent.ID
  AND kr_role.ID = role_map.ROLE_ID
  AND kr_role.CLIENT = cl.ID
  AND cl.REALM_ID = '<realm_name>'
  AND cl.CLIENT_ID = '<client_name>'
  ORDER BY 1, 2, 3;

答案 3 :(得分:1)

现在应该可以使用更新的其余端点。

Set<UserRepresentation> usersOfRole = realmResource.roles().get(roleName).getRoleUserMembers();

答案 4 :(得分:0)

GET /{realm}/clients/{id}/roles/{role-name}/users