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

Keycloak v26多组织成员特性疑问:多组织用户Token缺失Organization Claims

Keycloak v26多组织成员特性问题解答

一、多组织成员时Organization Claims消失的限制说明

Keycloak v26的多组织成员特性在默认配置下,当用户属于多个组织时,不会自动在Access Token中包含组织Claims,这是当前版本的设计逻辑,而非Bug。因为当用户关联多个组织时,Keycloak无法默认确定要注入哪个组织的信息,所以会跳过组织Claims的生成。

你可以通过以下方式调整:

  • 检查客户端的Fine-grained OpenID Connect Configuration,确认organization相关Claim是否被设置为可选或需要显式请求
  • 若需要在多组织场景下返回所有关联组织的信息,可通过自定义Mapper实现:
    1. 进入目标客户端的Mappers页面
    2. 创建新的Script Mapper
    3. 使用Groovy脚本获取用户所有组织信息并注入Token,示例脚本:
    def organizations = user.getOrganizations()
    if (organizations != null && !organizations.isEmpty()) {
        def orgIds = organizations.stream().map(org -> org.getId()).collect(java.util.stream.Collectors.toList())
        return orgIds
    }
    return null
    
    1. 将Mapper的Token Claim Name设为organizations,并勾选Access Token选项

二、生成特定组织的专属Access Token

有两种常用方式生成针对单个特定组织的Access Token:

1. 授权请求中指定组织

发起OAuth2/OpenID Connect授权请求时,添加organization参数指定目标组织的ID或名称:

  • 授权码流程示例:
    GET /realms/{realm}/protocol/openid-connect/auth?
    client_id={client_id}&
    redirect_uri={redirect_uri}&
    response_type=code&
    scope=openid&
    organization={org_id_or_name}
    
  • 密码流程示例:
    POST /realms/{realm}/protocol/openid-connect/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=password&
    client_id={client_id}&
    username={username}&
    password={password}&
    scope=openid&
    organization={org_id_or_name}
    

2. 客户端范围限制组织

若要让客户端只能获取特定组织的Token,可配置客户端的组织限制:

  • 进入客户端的Settings页面,找到Organization Access选项
  • 添加允许的组织ID,此后该客户端发起的请求无需额外指定参数,只能获取指定组织的Token

内容的提问来源于stack exchange,提问作者Sébastien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:01:01