5.3.2. 组合 LDAP 和 RBAC 进行授权
使用 LDAP 服务器或使用属性文件进行身份验证的用户可以是用户组的成员。用户组只是可分配给一个或多个用户的任意标签。RBAC 可以配置为使用此组信息自动为用户分配角色或将用户从角色中排除。
LDAP 目录包含用户帐户和组的条目,可通过属性来引用。根据 LDAP 服务器配置,用户实体可以映射用户通过 memberOf
属性属于的组;组实体可以通过 uniqueMember
属性或两者的组合来映射属于该用户的组。用户通过 LDAP 服务器成功身份验证后,将执行组搜索来加载该用户的组信息。根据使用的目录服务器,组搜索可使用其 SN(通常是身份验证中使用的用户名),或者通过使用目录中用户条目的 DN 执行。将 LDAP 设置为安全域中的授权机制时,会配置组搜索(group
)之间的映射。
-search
)以及用户名和可分辨名称(用户名到dn
从 LDAP 服务器确定用户组成员资格信息后,将在 RBAC 配置中使用映射来确定用户具有哪些角色。此映射被配置为明确包含或排除组以及单个用户。
用户连接到服务器的身份验证步骤始终先发生。成功验证用户后,服务器将加载用户的组。身份验证步骤和授权步骤各自都需要连接 LDAP 服务器。安全域通过为组加载步骤重复利用身份验证连接来优化此过程。
5.3.2.1. 使用 group-search
搜索组成员资格信息时可使用两种不同的样式:组先于组,组 为 Principal。组的主体具有用户的条目,其中包含使用 memberOf
属性对其所属组的引用。组到 Principal 具有组的条目,其条目包含对属于其成员的用户的引用(使用 uniqueMember
属性)。
JBoss EAP 支持组以及主要搜索的组(Principal)支持,但建议将组 Principal 改为 Principal。如果使用主要到组,则可以通过读取已知区分名称的属性直接加载组信息,而无需执行任何搜索。组到 Principal 需要大量的搜索来识别所有引用用户的组。
Principal 到 Group 和 Group to Principal 使用 group-search
,它包含以下属性:
属性 | 描述 |
---|---|
group-name |
此属性用于指定应当用于作为用户所属组列表返回的组名的格式。这可以是组名的简单形式,也可以是组的可分辨名称。如果区分名称是必需的,可将此属性设置为 |
迭代 |
此属性用于指示在确定用户所属组后,它也应该根据组反复搜索,以识别这些组所属的组。如果启用了迭代搜索,它将持续到检测到任何其他组或循环时到达非成员的组。默认值为 |
group-dn-attribute |
在组的条目中,属性是其可分辨的名称。默认值为 to |
group-name-attribute |
在组的条目中,属性是其简单名称。默认为 |
cyclic 组成员身份不是问题。将保留每个搜索的记录,以防止已搜索的组再次被搜索。
若要使迭代搜索起作用,组条目需要与用户条目相同。然后,使用相同方法识别用户所属组。如果组成员身份的组、用于交叉引用的属性名称或参考方向有变化时,则无法做到这一点。
组搜索的组主体(memberOf)
例如,一个示例是 Group One
的成员,而
又是 GroupOne
GroupFive
的成员。组成员身份将通过在成员级别使用 memberOf
属性来显示。这意味着,TestUserOne
会将 memberOf
属性设置为 GroupOne
的 the dn
。反过来,GroupOne
会将 memberOf
属性设置为 GroupFive
的 The dn
。
要使用这种类型的搜索,将 principal-to-group
元素添加到 group-search
元素中:
组、memberOf、配置主体
/core-service=management/security-realm=ldap-security-realm:add batch /core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection) /core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=principal-to-group:add(group-attribute="memberOf",iterative=true,group-dn-attribute="dn", group-name="SIMPLE",group-name-attribute="cn") run-batch
上面的示例假定您已定义了 ldap-connection
。您还需要配置本节前面涵盖的身份验证机制。
注意 group-attribute
属性与 group-search=principal-to-group
一起使用。作为参考:
属性 | 描述 |
---|---|
group-attribute |
用户条目上与用户所属组的可分辨名称匹配的属性名称。默认值为 |
prefer-original-connection |
这个值用于指示在引用后应该使用的组信息。每次加载主体时,来自每个组成员资格的属性都会随后被加载。每次加载属性时,都可以使用来自最后一次引用的原始连接或连接。默认值为 |
Group to Principal, uniqueMember, group Search
考虑与 Principal 相同的示例,其中 user TestUserOne
是 GroupOne
的成员,而 GroupOne
又是 GroupFive
的成员。不过,在这种情况下,组成员资格将通过在组级别上设置的 uniqueMember
属性来显示。这意味着 GroupFive
会将 uniqueMember
设置为 GroupOne
的 The dn
。反过来,GroupOne
会将 uniqueMember
设置为 Test
UserOne 的值
。
要使用这种类型的搜索,在 group-
元素:
search 元素中添加 group-to-
principal
Group to Principal, uniqueMember, Configuration
/core-service=management/security-realm=ldap-security-realm:add batch /core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection) /core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME") run-batch
上面的示例假定您已定义了 ldap-connection
。您还需要配置本节前面涵盖的身份验证机制。
注意 principal-attribute
属性用于 group-search=group-to-principal
。Group-to-principal
用于定义如何搜索引用用户条目的组,而 principal-attribute
则用于定义引用主体的组条目。
作为参考:
属性 | 描述 |
---|---|
base-dn | 用于开始搜索的可分辨上下文名称。 |
递归 |
是否也搜索子上下文。默认值为 |
search-by |
搜索中使用的角色名称的形式。有效值为 |
prefer-original-connection | 这个值用于指示在引用后应该使用的组信息。每次加载主体时,来自每个组成员资格的属性都会随后被加载。每次加载属性时,都可以使用来自最后一次引用的原始连接或连接。 |
属性 | 描述 |
---|---|
principal-attribute |
引用用户条目的组条目上的 属性名称。默认为 |