[英]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_ENTITY
、 USER_ROLE_MAPPING
、 KEYCLOAK_ROLE
、 USER_GROUP_MEMBERSHIP
、 KEYCLOAK_GROUP
表。
它的作品很好。 唯一的問題是,也許在未來的 Keycloak 版本中,可以在 DB 結構中添加一些更改......在這種情況下,應該調查更改並在模型更改后更新 Keycloak 版本。
如果您正在執行類似我的解決方案的操作,請確保您沒有更改 Keycloak 數據庫中的任何內容。 或者,如果您想在不使用 Keycloak API 的情況下執行插入或刪除操作,請確保您擁有有關 Keycloak 數據庫結構的所有信息。 實際上大約有93張桌子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.