【问题标题】:Keycloak - Get all Users mapped to rolesKeycloak - 将所有用户映射到角色
【发布时间】:2016-11-17 05:41:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: keycloak keycloak-services


    【解决方案1】:

    有一个出色的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';
    

    【讨论】:

    • 好东西,谢谢分享,而且他们还有管理模块来处理这类查询,对吧..??
    • 我们如何使用 java 客户端 api 做到这一点?
    • 此查询仅显示手动分配的用户。对我来说,我们有一个 LDAP 服务器,从中同步角色 - 此查询未返回具有角色访问权限的用户(从 LDAP 读取)
    • 您的链接似乎已损坏,工作链接:issues.redhat.com/browse/KEYCLOAK-1902?_sscc=t
    【解决方案2】:

    基于documentation,它似乎是这个API:

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

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

    【讨论】:

    【解决方案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;
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:
        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;
        

        【讨论】:

          猜你喜欢
          • 2019-06-12
          • 2021-07-25
          • 2023-01-11
          • 2021-09-06
          • 2021-08-03
          • 2019-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多