REST 中缺少 Keycloak 用户角色 API

Keycloak User Roles missing in REST API

我想问一下,如果有人知道,为什么 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 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 API 文档我们可以做到这一点。但没有结果。我还尝试为客户端使用不同的映射器,我们可以使用它们向令牌数据、用户信息等添加一些信息。但看起来我们无法使用 GET /auth/admin/realms/{realm}/users 端点获取该信息。它也不适用于 GET /auth/admin/realms/{realm}/users/{userId} 端点。

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

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

So, what I did.

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

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

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

If you are doing something like my solution, be sure that you are not changing anything in the Keycloak database. Or, if you want to do inserting or removing operations without using Keycloak API, be sure that you have all information about the Keycloak database structure. There are actually about 93 tables.