首页 > 解决方案 > 如何检测和防止 Unboundid LDAP SDK for java 中的循环引用?

问题描述

我正在使用 Unboundid LDAP SDK for java 连接到 AD 并在 AD 上执行操作。

我在组下嵌套了组的分配。

例如:

Group-1有成员Group-2

Group-2有成员Group-3

现在Group-3可能有成员Group-1。由于循环引用,这将导致无限循环。

此外,我n在 AD 中具有嵌套成员的深度级别,因此我不确定如何在将组成员设为另一个组时检测循环引用。

为了找到解决方案,我在谷歌上做了一些研究,并遇到了这个问题:

clientLoop (96) clientLoop 结果代码表明客户端在处理来自服务器的结果时检测到某种循环。它通常适用于客户端尝试关注推荐(或搜索结果引用)并遇到它已经尝试关注的推荐 URL 时。

Loop_DETECT (54) 如果服务器检测到链接或别名循环,将使用结果代码 (54)。

参考:https ://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/ResultCode.html#LOOP_DETECT

所以这意味着它是可能的,并且在 Unboundid ldap sdk 中有一种方法可以检测循环引用。但是我还没有找到示例代码或解决方案。

在这种情况下,如何使用 Unboundid LDAP SDK for java 检测和防止循环引用?

注意:不是现有相关问题的重复,因为我仅在 Unboundid ldap sdk 的上下文中寻求答案/解决方案。不在某些 powershell 脚本中。其他类似的问题还没有与Unboundid ldap sdk相关的答案。

标签: javaunboundid-ldap-sdkunboundid

解决方案


您可能想尝试使用功能 LDAP_MATCHING_RULE_IN_CHAIN 的(Active Directory 特定解决方案),如果这适合您的需要,可以完全避免这种情况,请参见例如:

在循环依赖的情况下使用 1.2.840.113556.1.4.1941 实现是否安全?

请参阅完整示例,例如:

https://confluence.atlassian.com/crowdkb/active-directory-user-filter-does-not-search-nested-groups-715130424.html

这也避免了多次调用 Active Directory,这可能会带来性能优势(还要确保使用缓存连接,这不是 SSL/TLS 连接的默认设置)。

如果您还需要考虑森林中的其他域,您可能需要连接到全局目录(端口 3268 上的明文或 3269 上的 SSL/TLS)

长幻数是来自 Microsoft 的 OIN(部分:https ://ldapwiki.com/wiki/1.2.840.113556),它是函数名称的可移植数字表示:LDAP_MATCHING_RULE_IN_CHAIN。您的软件可能不知道此函数名称,但 OIN 是真正通过线路传输到 LDAP/Active Directory 的内容。


推荐阅读