如何通过 REST API 将 Keycloak 领域角色添加到组

Posted

技术标签:

【中文标题】如何通过 REST API 将 Keycloak 领域角色添加到组【英文标题】:How to add Keycloak realm role to group via REST API 【发布时间】:2020-10-16 05:47:48 【问题描述】:

我想将领域角色“TEST_ROLE_123”分配给一个组,我正在使用

PUT /admin/realms/ataccamaone/groups/group-id

"realmRoles":["TEST_ROLE_123"]

我从/admin/realms/ataccamaone/groups/ 得到group-id

但是我得到了204 No Content 的响应,但在 Keycloak 控制台中我没有看到分配。

【问题讨论】:

【参考方案1】:

我尝试重现您的问题,发现PUT /admin/realms/ataccamaone/groups/group-id 只能编辑组名。

检查浏览器的“网络”选项卡,我看到它使用另一个 URL 将角色映射到组。通过 Admin REST API 执行此操作的步骤是:

    按照https://www.keycloak.org/docs/latest/authorization_services/index.html#_service_protection_whatis_obtain_pat 部分所述获取 PAT

以下步骤使用此 PAT 作为不记名令牌(在“授权”标头中)。我猜你已经得到了这个。

    调用GET http://localhost:8080/auth/admin/realms/realm1/roles 获取角色列表,包括他们的nameid 值。

    致电GET http://localhost:8080/auth/admin/realms/realm1/groups 获取群组列表,包括他们的ids

    致电POST http://localhost:8080/auth/admin/realms/realm1/groups/group-id/role-mappings/realm 使用以下正文:

    [
      
        "id": "9083cac3-4280-497d-b973-7713a5fb12b4",  // role-id
        "name": "secretary"   // role-name
      
    ] 
    
    

    使用与步骤 4 相同的 URL 和正文调用 DELETE 以从组中删除角色。

【讨论】:

我们需要哪些凭据才能获得此 api 的授权? 9 个月后我遇到了同样的问题。 Keycloak 在很多方面都很棒,但文档确实可以使用它自己的项目来提升它的水平。 非常感谢您分享这个。 Keycloak 文档可以在此主题上进行改进...【参考方案2】:

我遇到了同样的问题,并使用 GROUP 进行了纠正,基本上我已将首选角色添加到用户组角色列表中,并在通过 REST API 创建用户时使用了该特定用户组。

例如:- ADMIN_USER_GROUP -> 包含('ADMIN_ROLE')

那么用户创建 API 请求应该如下所示,


    "firstName": "Sergey",
    "lastName": "Kargopolov",
    "email": "test4@test.com",
    "enabled": "true",
    "credentials": [
        
            "value": "123"
        
    ],
    "groups": [
        "ADMIN_USER_GROUP"
    ]

【讨论】:

以上是关于如何通过 REST API 将 Keycloak 领域角色添加到组的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Keycloak 并通过 REST API 完成所有步骤并获得 JWT?

如何通过执行操作电子邮件通过 keycloak admin rest api 更新密码

使用 cUrl 通过其 REST API 配置 Keycloak

记录以便使用 KeyCloak REST API 创建浏览器会话

如何使用 REST API 在 keycloak 中重置用户密码

如何使用 httppost/rest-api 从 keycloak 获取用户列表