我想问一下,如果有人知道,为什么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": []
}
答案 0 :(得分:7)
您没有在用户详细信息中获得角色,因为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}
答案 1 :(得分:0)
我也尝试在一次调用的范围内获取此信息,因为根据 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_ENTITY
、USER_ROLE_MAPPING
、KEYCLOAK_ROLE
、USER_GROUP_MEMBERSHIP
、KEYCLOAK_GROUP
表。
它的作品很好。唯一的事情是,也许在未来的 Keycloak 版本中,可以在数据库结构中添加一些更改...... 在这种情况下,应调查更改并在模型更改后更新 Keycloak 版本。
<块引用>如果您正在执行类似我的解决方案的操作,请确保您没有更改 Keycloak 数据库中的任何内容。或者,如果您想在不使用 Keycloak API 的情况下执行插入或删除操作,请确保您拥有有关 Keycloak 数据库结构的所有信息。实际上大约有 93 张桌子。