WSO2 IS 5.10.4更新Service Provider报Duplicate Key错误咨询
WSO2 IS 5.10.4更新SP联邦认证报Duplicate key异常排查方案
问题场景
WSO2 IS 5.10.4版本环境中,将指定服务提供者(SP)的认证类型从Basic基础认证切换为对接自有Azure IDP的联邦认证(Federated Authentication)时,管理控制台GUI弹窗抛出如下错误:
Error while updating Service Provider : Duplicate key [Lorg.wso2.carbon.identity.application.common.model.Property;@7ba219e7
触发原因
- 核心根因为WSO2 IS 5.10.x系列的已知代码缺陷:联邦认证配置的存储逻辑中,将
Property类型数组转换为Map结构存储时,org.wso2.carbon.identity.application.common.model.Property类未重写equals()与hashCode()方法,默认使用对象内存地址作为键判断依据,当配置中存在逻辑上重复的属性条目时,就会触发重复键异常。 - 常见触发场景包括:
- 该SP历史上配置过其他联邦IDP,删除旧IDP关联时未完全清理残留的认证属性配置,冗余条目存储在数据库的SP配置字段中
- 配置Azure IDP联邦认证参数时,手动重复添加了同名的自定义属性(如重复添加
ClientID、ClientSecret属性条目) - 从低版本升级到5.10.4版本时,SP配置数据迁移不完整,遗留了重复的认证属性条目
排查解决步骤
- 控制台层面快速排查
- 进入报错SP的配置页面,先删除所有已配置的认证步骤、联邦IDP关联配置,点击更新提交,确认基础配置是否能正常保存。
- 如果清空配置后可正常保存,重新按流程配置Azure IDP联邦认证,添加认证器属性时逐一核对,避免重复添加同名字段,提交即可恢复。
- 数据库层面清理残留配置
- 如果清空控制台配置后仍然报错,连接WSO2 IS对应的身份数据库,查询
SP_APP表中对应SP的记录,提取AUTH_CONFIG字段存储的XML配置内容,检索是否存在name属性完全相同的重复<Property>节点。 - 操作前先备份
SP_APP表全量数据,手动删除XML中重复的冗余Property节点,保存更新后重启WSO2 IS节点,再重新配置Azure联邦认证即可。
- 如果清空控制台配置后仍然报错,连接WSO2 IS对应的身份数据库,查询
- 永久修复方案
针对该版本的代码缺陷,可修改org.wso2.carbon.identity.application.common.model.Property类,基于属性的name字段重写equals()和hashCode()方法,替换对应组件jar包后重启集群节点,可彻底规避该类重复键异常。
内容的提问来源于stack exchange,提问作者Jason Whitener
相关产品推荐
相关产品推荐

