【问题标题】:Keycloak User Roles missing in REST APIREST API 中缺少 Keycloak 用户角色
【发布时间】:2018-07-05 14:28:32
【问题描述】:

如果有人知道,我想问一下,为什么 REST ADMIN API 请求的用户详细信息中没有没有角色。我看到一些关于这个主题的帖子,但要么没有明确的答案,要么他们建议使用 keycloak-admin-client,但这似乎不太方便。也许我需要在管理控制台中映射角色或使用声明?角色是最重要的用户属性之一,那么他们没有作为其他用户属性检索的原因是什么?有什么建议吗?谢谢

GET /auth/admin/realms/{realm}/users 

{
  "id": "efa7e6c0-139f-44d8-baa8-10822ed2a9c1",
  "createdTimestamp": 1516707328588,
  "username": "testuser",
  "enabled": true,
  "totp": false,
  "emailVerified": false,
  "firstName": "Test",
  "lastName": "User",
  "email": "test@xxx.com",
  "attributes": {"xxx": ["123456"]},
  "disableableCredentialTypes": ["password"],
  "requiredActions": []
}

【问题讨论】:

    标签: rest roles keycloak user-roles


    【解决方案1】:

    您没有在用户详细信息中获取角色,因为 REST API 严格基于资源,并且角色是仅与用户关联的单独对象。以下 REST URL 可用于获取用户的角色
    获取相关领域角色:
    GET /auth/admin/realms/{realm}/users/{user-uuid}/role-mappings/realm
    获取特定客户端的关联角色:
    GET /auth/admin/realms/{realm}/users/{user-uuid}/role-mappings/clients/{client-uuid}

    【讨论】:

    • 我也有同样的问题,我需要与用户关联的角色、组。获取我使用的内容:keycloak.org/docs-api/3.0/rest-api/index.html#_users_resource URI: GET /admin/realms/{realm}/users/{id} 根据上面链接中提供的文档,它应该提供用户详细信息,包括角色、组。
    • 由于响应中缺少角色和组,这会导致严重的效率问题,因为有时必须有大约 20 个按名称、角色和组搜索用户的请求
    • 即使我已经为用户映射了角色 GET /auth/admin/realms/{realm}/users/{user-uuid}/role-mappings/realm 返回空结果。
    【解决方案2】:

    我还尝试在一次调用的范围内获取此信息,因为基于 Keycloak API 文档,我们可以做到这一点。但没有结果。我还尝试为客户端使用不同的映射器,我们可以使用这些映射器向令牌数据、用户信息等添加一些信息。但看起来我们无法使用GET /auth/admin/realms/{realm}/users 端点获取该信息。它也不适用于 GET /auth/admin/realms/{realm}/users/{userId} 端点。

    在我的例子中,我需要获取带有分页和搜索选项的用户列表,并且我需要有关分配给用户的客户端角色以及用户所在的组的信息。

    因此,我需要进行大量 API 调用。我需要获取用户列表,然后对于每个用户,我需要通过额外的 API 调用获取用户组和客户端角色,然后组合这些信息。此外,进行 API 调用以让用户计数。但是,实际上并没有超过 20 次 API 调用来获取 10 个用户所需的信息。

    那么,我做了什么。

    作为另一种方法,我已将我的 Nest.js 应用程序直接连接到 Keycloak 数据库,并使用 TypeORM 通过一个 SQL 查询来完成我需要的操作。我已经创建了具有关系的模型,并且很容易做到。

    就我而言,我使用过USER_ENTITYUSER_ROLE_MAPPINGKEYCLOAK_ROLEUSER_GROUP_MEMBERSHIPKEYCLOAK_GROUP 表。

    它的作品很好。唯一的问题是,在未来的 Keycloak 版本中,可能会在数据库结构中添加一些更改...... 在这种情况下,应调查更改,并在模型更改后更新 Keycloak 版本。

    如果您正在执行类似我的解决方案的操作,请确保您没有更改 Keycloak 数据库中的任何内容。或者,如果您想在不使用 Keycloak API 的情况下执行插入或删除操作,请确保您拥有有关 Keycloak 数据库结构的所有信息。实际上大约有 93 张桌子。

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 2019-08-08
      • 2020-10-30
      • 2021-11-01
      • 2021-12-12
      • 1970-01-01
      • 2019-12-07
      • 2021-12-15
      • 2019-05-05
      相关资源
      最近更新 更多