在wildfly中进行LDAP配置,搜索角色

Rom*_*nko 7 jboss ldap wildfly

我有使用wildfly建立的Kerberos加上我从LDAP获取组,它适用于某些配置,但不适用于其他配置.

Kerberos按预期工作,这是我对LDAP的配置:

<login-module code="org.jboss.security.negotiation.AdvancedLdapLoginModule" flag="requisite">
    <module-option name="java.naming.provider.url" value="ldap://ttttt.com:3268/"/>
    <module-option name="bindDN" value="user"/>
    <module-option name="bindCredential" value="passwd"/>
    <module-option name="baseCtxDN" value="DC=AD,DC=TTT,DC=com"/>
    <module-option name="baseFilter" value="(userPrincipalName={0})"/>
    <module-option name="rolesCtxDN" value="OU=Groups, DC=AD,DC=TTT,DC=com"/>
    <module-option name="roleFilter" value="(member={1})"/>
    <module-option name="roleAttributeID" value="memberOf"/>
    <module-option name="roleAttributeIsDN" value="true"/>
    <module-option name="roleNameAttributeID" value="cn"/>
    <module-option name="recurseRoles" value="true"/>
    <module-option name="password-stacking" value="useFirstPass"/>
    <module-option name="allowEmptyPassword" value="false"/>
    <module-option name="searchScope" value="SUBTREE_SCOPE"/>
</login-module>
Run Code Online (Sandbox Code Playgroud)

我已经设置了一个名为app_ttt_api的组.我在这个小组中添加了一些成员.

因此,当我添加的成员本身是一个组并且您是该组的成员时,我的设置有效.如果直接添加用户,则无效.此外,如果添加包含包含用户的组的组,它也不起作用.

所以,group->group->user工作但是

group->user
Run Code Online (Sandbox Code Playgroud)

group->group->group->user
Run Code Online (Sandbox Code Playgroud)

所以我试图弄清楚什么是错的,我应该修改什么,所以如果用户是任何递归组的一部分或直接是组的一部分,它应该工作.

编辑:后续问题 - 我可以在日志中看到LDAP实际返回的内容,即用户所属的用户组列表吗?还是LDAP流量?

Edit2:实际上已经找到了调试,它在这里描述 - https://developer.jboss.org/thread/272926

EDIT3:

我查看了AdvancedLdapLoginModule的源代码

这里:AdvancedLdapLoginModule

从代码看起来如下:1.从用户初始角色上下文过滤中获取所有角色

526            results = searchContext.search(rolesCtxDN, roleFilter, filterArgs, roleSearchControls);
rolesCtxDN=DC=AD,DC=TTT,DC=com roleFilter=(member={1}) filterArgs[0]=myuser@AD.TTT.COM filterArgs[1]=CN=myuser,CN=Managed Service Accounts,DC=AD,DC=MLP,DC=com
Run Code Online (Sandbox Code Playgroud)
  1. 通过调用角色进行迭代

    532 obtainRole(searchContext,resultDN);

  2. 在obtainRole它调用

    572属性result = searchContext.getAttributes(dn,attrNames); 575属性roles = result.get(roleAttributeID);

    其中attrNames是roleAttributeID - 在我的情况下是"memberOf".

  3. 完成从第575行获得的所有角色并致电

    585 loadRoleByRoleNameAttributeID(searchContext,roleDN); 586 recurseRolesSearch(searchContext,baseRoleDN);

其中585添加角色,586递归搜索底层角色.

在我的案例中的问题3 - 为什么我们尝试获取角色我们的初始角色是memberOf而不是立即添加它,我们已经知道用户是这个角色的成员.我认为这就是为什么我只有在拥有group-> group-> user而不是在其他情况下获得授权的原因.

我理解发生了什么事吗?我应该在配置中传递其他内容吗?当我这样做时,我尝试了配置的不同变体

   <module-option name="roleAttributeID" value="cn"/>
   <module-option name="roleAttributeIsDN" value="false"/>
Run Code Online (Sandbox Code Playgroud)

它将加载所有第一级角色,但不会递归到较低级别的组.

在其他配置中,我尝试过没有加载任何角色.