Wildfly Elytron Security配置双授权域合并获取LDAP与JDBC用户角色
问题根因
你的配置存在3个关键错误,导致无法合并两类角色:
- 角色属性映射名不统一:LDAP域中你将角色属性映射为
Roles(首字母大写),JDBC域映射为roles(全小写),但你配置的simple-role-decoder仅读取roles属性,LDAP侧的角色完全没有被解码器识别。 - 安全域配置错误:
- 标签
<realm name=jdbc-realm"存在语法错误,缺失属性值开头的双引号 - 你仅为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
相关产品推荐
相关产品推荐

