![在 LDAP 中验证嵌套组](https://linux22.com/image/572107/%E5%9C%A8%20LDAP%20%E4%B8%AD%E9%AA%8C%E8%AF%81%E5%B5%8C%E5%A5%97%E7%BB%84.png)
我不太了解 LDAP,因此提前致歉。
我正在查看使用 LDAP 进行某些身份验证的应用程序中的一个错误。
客户端设置的 LDAP 目录结构包含嵌套组,如下所示:
UAT Group
DEV Group
portfolio_mangers
在 DEV 组下我们有一些用户:
DEV Group
jsmith
cwilson
plo
用户要求身份验证将递归遍历输入组以确定用户是否直接或间接(嵌套)是输入组的成员。
因此,如果我们从 UAT 组或 DEV 组开始遍历,用户 jsmith、cwilson 和 plo 将通过身份验证。
这是可能的,对吗?从我的阅读来看,我认为我必须指定一个基本名称和范围。由于我想搜索整个子树,所以我将指定 SUBTREE 的范围。这有意义吗?还有其他选择吗?
来自 LDAP 经验丰富的人士的建议将非常有用。谢谢。
答案1
您正在尝试配置什么应用程序。
大多数应用程序作为 LDAP 客户端都具有一定程度的 LDAP 支持,但根本不支持嵌套组。
如果不修改软件,你可能会倒霉。
如果您的 LDAP 服务器恰好是 Microsoft Active Directory,那么有一个非标准搜索过滤器可能会对您有所帮助。
看: -http://support.microsoft.com/kb/914828 -http://msdn.microsoft.com/en-us/library/windows/desktop/aa746475(v=vs.85).aspx
LDAP_MATCHING_RULE_IN_CHAIN 是一个匹配规则 OID,旨在提供查找对象祖先的方法。许多使用 AD 和 AD LDS 的应用程序通常使用按父子关系排序的分层数据。以前,应用程序执行可传递的组扩展来确定组成员身份,这会占用过多的网络带宽;如果链接一直遍历到最后,应用程序需要进行多次往返才能确定对象是否“在链中”。
答案2
如果您知道哪个特定组被授权,请从该组开始。
您将获得该对象的 LDAP 专有名称的引用,并枚举member
该对象的属性。这将包含更多专有名称。
检查每个对象。如果是用户,则他们属于该组,将他们添加到授权用户列表中。如果是组,则枚举他们的member
对象,就像您对“基础”组所做的那样,将用户添加到允许列表并枚举组。
我建议对递归进行限制(或者更好的是,跟踪已检查对象的列表以避免检查两次),因为在组成员关系中可能会出现无限循环。
您将构建所有获得授权的用户对象的列表,然后比较身份验证用户的可分辨名称以查看它是否在授权列表中。
搜索基础和范围用于限制尝试查找对象的范围;您需要使用包含您正在查看的所有内容的位置。