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

Wildfly Elytron Security配置双授权域合并获取LDAP与JDBC用户角色

问题根因

你的配置存在3个关键错误,导致无法合并两类角色:

  • 角色属性映射名不统一:LDAP域中你将角色属性映射为Roles(首字母大写),JDBC域映射为roles(全小写),但你配置的simple-role-decoder仅读取roles属性,LDAP侧的角色完全没有被解码器识别。
  • 安全域配置错误:
    1. 标签<realm name=jdbc-realm"存在语法错误,缺失属性值开头的双引号
    2. 你仅为jdbc-realm配置了角色解码器,但安全域默认使用的聚合域my-realm没有关联角色解码规则,也没有将LDAP域纳入安全域的realm配置中
  • 聚合域未配置属性合并策略:部分Elytron版本需要显式开启属性合并,才能将两个授权域的同名字段值合并为数组,而不是后加载的覆盖先加载的。

修正方案

第一步:统一角色属性名

将LDAP域的属性映射改为和JDBC一致的小写roles:

<attribute from="cn" to="roles" .../>

第二步:修正安全域配置

将聚合域加入安全域,关联全局角色解码器:

<security-domain name="securtiyDomain" default-realm="my-realm" permission-mapper="default-permission-mapper">
    <realm name="my-realm" role-decoder="from-roles-attribute"/>
    <realm name="jdbc-realm" role-decoder="from-roles-attribute"/>
    <realm name="ldap-realm" role-decoder="from-roles-attribute"/>
</security-domain>

第三步:显式配置聚合域属性合并(可选,针对低版本Elytron)

如果修正以上配置后仍未生效,给聚合域添加属性合并配置:

<aggregate-realm name="my-realm" authentication-realm="ldap-realm" authorization-realms="jdbc-realm ldap-realm">
    <attribute-mapping merge-behavior="merge"/>
</aggregate-realm>

修改完成后重启服务,即可同时获取LDAP和JDBC表中存储的两类角色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:00:00