You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak多租户场景下如何通过REST API获取单个角色/组绑定的权限

Keycloak 单用户组绑定权限查询方案

针对你基于用户组做多租户、需要单独查询指定组权限的场景,有两种成熟的落地方案:

方案1:调用授权评估接口精准查询指定组权限

该方案可以直接按需查询任意用户、任意指定用户组绑定的权限,不需要更换用户当前的登录令牌。

  • 前置准备:先调用管理员登录接口获取拥有view-authorization权限的访问令牌,后续请求头需要携带Authorization: Bearer {管理员令牌}
  • 接口地址:POST /admin/realms/{你的领域名称}/clients/{机密客户端的UUID}/authz/permission/evaluate
  • 请求体参数:
    {
      "userId": "待查询用户的UUID",
      "groups": ["目标用户组的UUID"], // 仅填入你要查询的单个用户组ID,就会过滤其他组的权限
      "resources": [], // 留空返回该组绑定的所有资源权限,也可填入指定资源ID做定向校验
      "scopes": []
    }
    
  • 返回说明:响应结果仅包含你指定的用户组绑定的所有资源、操作权限,不会聚合该用户所属其他组的权限。

方案2:切换租户时申请仅带目标组权限的访问令牌

如果希望后续业务请求自动只校验当前选中租户的权限,可以通过令牌交换流程,生成仅生效目标用户组权限的专属访问令牌。

  • 接口地址:POST /realms/{你的领域名称}/protocol/openid-connect/token
  • 请求参数(表单格式):
    • grant_type: urn:ietf:params:oauth:grant-type:token-exchange
    • subject_token: 用户当前的有效登录令牌
    • client_id: 你的机密客户端ID
    • client_secret: 你的机密客户端密钥
    • requested_token_type: urn:ietf:params:oauth:token-type:access_token
    • claims: {"groups": {"value": "group_org1"}} // 替换为你要限制的用户组名称/ID
  • 使用说明:用新返回的访问令牌调用资源接口或者权限查询接口,Keycloak只会返回该用户组对应的权限,不会出现多租户权限聚合的问题。

配套辅助接口

如果需要查询用户组对应的UUID,可以调用用户组搜索接口:
GET /admin/realms/{你的领域名称}/groups?search={用户组名称}

注意事项

  • 提前在机密客户端的配置页开启Authorization权限,以及Token Exchange开关,否则接口会返回403权限错误。
  • 若需要同时查询多个组的权限,只需在groups数组中填入多个用户组的UUID即可。

内容的提问来源于stack exchange,提问作者Rohit Patidar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:06:03