java - 如何检测和防止 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相关的答案。
解决方案
您可能想尝试使用功能 LDAP_MATCHING_RULE_IN_CHAIN 的(Active Directory 特定解决方案),如果这适合您的需要,可以完全避免这种情况,请参见例如:
在循环依赖的情况下使用 1.2.840.113556.1.4.1941 实现是否安全?
请参阅完整示例,例如:
这也避免了多次调用 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 的内容。