REST API中缺少Keycloak用户角色

时间:2018-01-26 08:50:28

标签: rest roles keycloak user-roles

我想问一下,如果有人知道,为什么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": []
}

2 个答案:

答案 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_ENTITYUSER_ROLE_MAPPINGKEYCLOAK_ROLEUSER_GROUP_MEMBERSHIPKEYCLOAK_GROUP 表。

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

<块引用>

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