【问题标题】:How to detect and prevent circular references in Unboundid LDAP SDK for java?如何检测和防止 Unboundid LDAP SDK for java 中的循环引用?
【发布时间】:2020-03-20 08:12:19
【问题描述】:

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

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

喜欢例如:

Group-1 有成员 Group-2

Group-2 有成员 Group-3

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

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

为了找到解决方案,我在google上做了一些研究,结果遇到了这个问题:

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相关的类似问题尚无答案。

【问题讨论】:

  • 怎么样?如果我搜索Group 1 并获取它的所有成员,我会得到Group-2。在其中我需要找到Group-2 成员,我会得到Group-3。现在再次Group-3 将拥有成员Group-1。再次循环在这 3 组之间继续。这不可能吗?
  • 具体与UnboundID SDK没有任何关系。这只是一个算法问题。
  • 我给出的参考链接以及我在问题“Loop_DETECT”中提到的特定于 Unboundid sdk 的东西。如果这个枚举是由 Unboundid 提供的,那么 unboundid sdk 必须通过某种方式或某种方法来了解循环引用的事情。

标签: java unboundid-ldap-sdk unboundid


【解决方案1】:

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

Is it safe to use 1.2.840.113556.1.4.1941 implementation in case of cyclic dependencies?

查看完整示例,例如:

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 的内容。

【讨论】:

  • 感谢您的回复。我正在尝试链接中给出的答案:confluence.atlassian.com/crowdkb/… 到目前为止,这在 AD 中作为查询起作用。但需要看看它是否适用于 UnboundID LDAP SDK,这是我在问题中提到的要求。希望它会工作
  • 你能解释一下这是什么值吗:memberOf:1.2.840.113556.1.4.1941:=cn=UserGroup1我理解以CN开头的部分但我不明白什么是1.2.840 ...
  • 查看最新版本的答案,它是函数名的唯一编号:LDAP_MATCHING_RULE_IN_CHAIN
  • 第二个链接很有帮助,尽管我需要先手动使用第二个链接中给出的过滤器进行搜索。但这是可以接受的,因为 Unboundid ldap sdk 似乎没有提供隐式方法来检测循环引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多