9

我知道keycloak已经暴露在api下面,

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

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

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

4

5 回答 5

10

有一个未完成的功能请求通过 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';
于 2016-08-05T04:45:41.347 回答
9

根据文档,它似乎是这个 API:

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

它在那里有一段时间。然而,在这个旧版本中,这种方式无法获得超过 100 个用户。后来修复它并添加了分页的可能性。

于 2019-06-13T14:55:36.060 回答
3

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

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;
于 2019-12-04T07:23:34.873 回答
3

现在应该可以使用更新的休息端点来实现这一点。

Set<UserRepresentation> usersOfRole = realmResource.roles().get(roleName).getRoleUserMembers();
于 2020-11-11T09:27:36.183 回答
0
SELECT username,
       kr.NAME,
       kr.REALM_ID
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
ORDER BY USERNAME,
         NAME,
         REALM_ID;
于 2021-08-20T05:46:50.763 回答