簡體   English   中英

REST API 中缺少 Keycloak 用戶角色

[英]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 個用戶所需的信息。

所以,我做了什么。

作為另一種方式,我將 Nest.js 應用程序直接連接到 Keycloak 數據庫,並使用 TypeORM 通過一個 SQL 查詢完成了我需要的操作。 我已經創建了帶有關系的模型,並且很容易做到。

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

它的作品很好。 唯一的問題是,也許在未來的 Keycloak 版本中,可以在 DB 結構中添加一些更改......在這種情況下,應該調查更改並在模型更改后更新 Keycloak 版本。

如果您正在執行類似我的解決方案的操作,請確保您沒有更改 Keycloak 數據庫中的任何內容。 或者,如果您想在不使用 Keycloak API 的情況下執行插入或刪除操作,請確保您擁有有關 Keycloak 數據庫結構的所有信息。 實際上大約有93張桌子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM