我知道keycloak暴露在api下面,
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<version>2.0.0.Final</version>
</dependency>
使用完整的文档here。我在这里找不到所需的api来获取具有映射到它们的特定角色的所有用户。
问题陈述 - 我需要从具有特定角色的keycloak服务器中挑选所有用户。我需要向所有用户发送电子邮件,并将角色映射到他们。
答案 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