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

如何在Keycloak中根据用户组配置不同的Scope?

Keycloak 按用户组动态添加Scope的实现方案

可行,通过客户端范围、组属性和映射器的组合配置即可实现需求,具体步骤如下:

1. 创建自定义客户端范围

  • 在Keycloak后台进入「客户端范围」页面,分别创建groupa和groupb两个自定义客户端范围,类型选择「可选」即可。

2. 为用户组添加标识属性

  • 找到A组,进入「属性」标签页,添加属性scope,值设为groupa;
  • 同理为B组添加scope属性,值设为groupb。

3. 配置客户端映射器动态注入Scope

  • 进入目标客户端,切换到「映射器」标签页,点击「创建」;
  • 选择映射器类型为Script Mapper(脚本映射器,Keycloak 11及以上版本支持);
  • 配置参数:
    • 名称:自定义(如Dynamic Group Scope Injector)
    • 脚本类型:选择Access Token(如需在ID Token中也生效,可同时选择ID Token)
    • 脚本内容:
      // 获取用户所有组的scope属性
      const scopes = [];
      const groups = user.getGroups();
      groups.forEach(group => {
          const groupScope = group.getFirstAttribute("scope");
          if (groupScope) scopes.push(groupScope);
      });
      // 合并原有scope与组关联scope
      const existingScopes = token.getScope();
      scopes.forEach(scope => {
          if (!existingScopes.contains(scope)) {
              existingScopes.add(scope);
          }
      });
      // 更新Token的scope字段
      token.setScope(existingScopes);
      
  • 保存映射器。

4. 基础配置验证

  • 确保目标客户端已将profile添加到「默认客户端范围」中(在客户端的「范围」标签页配置);
  • 若Keycloak禁用了脚本功能,需在配置文件(如keycloak.conf)中开启:spi-scripting-allow-scripts=true。

完成配置后,用户A登录生成的Token中scope字段会包含profile和groupa,用户B则包含profile和groupb。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:35:07