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

Keycloak PhaseTwo:如何在Token中仅包含指定组织属性并格式化JSON

解决Keycloak PhaseTwo组织属性Token定制需求:仅保留指定属性并解析JSON格式

要实现只将expiryDate和解析为JSON格式的feature字段加入Token,可通过Keycloak的**脚本映射器(Script Mapper)**自定义Token内容,具体步骤如下:

1. 创建脚本映射器

  • 登录Keycloak控制台,进入目标客户端的「Mappers」标签页,点击「Create」
  • 选择「Script Mapper」类型,配置基础信息:
    • Name:自定义名称(如「Custom Org Feature Claims」)
    • Token Claim Name:自定义返回的字段名(如「org_features」)
    • Claim JSON Type:选择「Object」(确保返回结构为JSON对象)
    • 勾选需要生效的Token类型(如ID Token、Access Token)

2. 编写Groovy定制脚本

将以下脚本填入「Script」输入框,脚本会提取目标属性并解析feature字符串为JSON对象:

// 从Token现有数据中获取组织属性(若原属性存在于用户属性中,可替换为user.getAttributes().get("feature")?.get(0))
def orgFeatureData = token.getOtherClaims().get("feature")
if (orgFeatureData) {
    // 取出目标组织(此处默认取第一个组织,可根据name/ID筛选特定组织)
    def targetOrg = orgFeatureData.values().first()
    if (targetOrg?.attributes) {
        def customClaims = [:]
        
        // 提取expiryDate属性(取数组第一个值)
        customClaims.expiryDate = targetOrg.attributes.expiryDate?.get(0)
        
        // 解析feature字符串为JSON对象
        def featureStr = targetOrg.attributes.feature?.get(0)
        if (featureStr) {
            customClaims.feature = new groovy.json.JsonSlurper().parseText(featureStr)
        }
        
        return customClaims
    }
}
// 无数据时返回空对象
return [:]

3. 禁用原有组织属性映射器

找到之前配置的、会将完整组织属性加入Token的映射器,将其禁用,避免重复输出冗余数据。

额外说明

  • 若存在多个组织,可在脚本中添加筛选逻辑(比如判断targetOrg.name == "ASTER")来指定目标组织
  • 确保Keycloak已启用脚本功能:检查服务器配置文件(如standalone.xml)中是否设置了scriptingEnabled="true"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:55:58