我设置了使用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>
我已经设置了一个名为app_ttt_api的组。我在这个小组中添加了一些成员。
所以当我添加的成员本身就是一个群组而你是该群组的成员时,我的设置就有效。如果直接添加用户,则无法正常工作。此外,如果您添加包含包含用户的组的组,它也无法正常工作。
所以,group->group->user
可以工作但
group->user
和
group->group->group->user
没有
所以我试图找出错误和我应该修改的内容,这样如果用户是任何递归组的一部分,或者直接作为组的一部分应该有效。
编辑:后续问题 - 我可以在日志中查看LDAP实际返回的内容,即用户所属的用户组列表吗?还是LDAP流量?
Edit2:实际上已经找到了调试,这里描述了它 - https://developer.jboss.org/thread/272926
Edit3:
我查看了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
通过调用
的角色进行迭代532 obtainRole(searchContext,resultDN);
在obtainRole中调用
572属性result = searchContext.getAttributes(dn,attrNames); 575属性角色= result.get(roleAttributeID);
其中attrNames是roleAttributeID - &#34; memberOf&#34;在我的情况下。
完成从第575行获得的所有角色并致电
585 loadRoleByRoleNameAttributeID(searchContext,roleDN); 586 recurseRolesSearch(searchContext,baseRoleDN);
其中585添加角色,586递归搜索基础角色。
我的案例中的问题在3 - 我们为什么要尝试获取角色我们的初始角色是memberOf而不是立即添加它,我们已经知道用户是这个角色的成员。我认为这就是为什么我只有在拥有group-&gt; group-&gt;用户时才获得授权而不是在其他情况下获得授权。
我了解正在发生什么事吗?我应该在配置中传递其他内容吗?当我做
时,我尝试了配置的不同变体 <module-option name="roleAttributeID" value="cn"/>
<module-option name="roleAttributeIsDN" value="false"/>
它将加载所有第一级角色,但不会递归到较低级别的组。
在其他配置中,我尝试过没有加载任何角色。