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

Keycloak JWT映射多值JSON数组属性出现转义符如何解决?

解决JWT中多值属性JSON字符串转义问题

问题原因

转义符出现是因为你的school属性值被系统识别为普通字符串而非JSON对象。JWT本身是JSON格式,当字符串里包含双引号时,会自动添加转义符来保证JSON结构的合法性。


解决方法

1. 修正用户属性的存储方式

  • 手动添加属性时:别直接把JSON字符串粘贴到文本框,确认系统是否支持直接存储JSON对象。比如部分身份认证系统的后台有专门的JSON字段输入选项,而非普通文本输入。
  • API导入用户时:确保请求体里school的每个值是JSON对象,不是带引号的字符串。示例请求体:
{
  "attributes": {
    "school": [
      {"student_No":"1000","teacher_No":"50","male":"800","female":"250"},
      {"student_No":"2000","teacher_No":"100","male":"1600","female":"500"}
    ]
  }
}

2. 调整客户端范围的映射器配置(以Keycloak为例)

如果用户属性已经是字符串形式存储,通过自定义映射器解析:

  • 删除原有普通属性映射器,新建Script Mapper(脚本映射器)
  • 配置参数:
    • 名称:自定义(如school-json解析器)
    • 映射类型:选择User Attribute
    • 属性名称:填school
  • 脚本内容写入解析逻辑:
var schoolAttrs = user.getAttribute('school');
var parsedSchools = [];
schoolAttrs.forEach(function(attr) {
    parsedSchools.push(JSON.parse(attr));
});
token.setClaim('school', parsedSchools);
  • 保存后重新获取JWT,数组内就会是原生JSON对象,转义符消失。

其他身份认证系统的思路一致:找到映射器的自定义处理功能,添加字符串转JSON对象的解析步骤即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:52:23