有没有办法在ldap api中使用ObjectGuid而不是dn?

Is there way to use ObjectGuid instead of dn in ldap api?

提问人:gstackoverflow 提问时间:7/26/2023 最后编辑:gstackoverflow 更新时间:7/26/2023 访问量:57

问:

我们有一个使用LDAP协议的应用程序。为此,我们使用 unboundId 库

// ldap
implementation("com.unboundid:unboundid-ldapsdk:6.0.9")

我们发现大多数 api 调用都用作参数。dn

例如:

ldapConnectionPool.getEntry(dn)

但是我们也发现它不是不可变的标识符(如果我们将对象从一个位置移动到另一个位置,或者如果我们重命名它(更改 CN),它可以被更改,但由于多种原因,拥有可变标识符并不好。因此,我们开始寻找不可变标识符,并找到了 objectGuiddn

但是这里的问题是我找不到任何允许我的方法

  1. 按 objectGuid 获取条目

我只找到了这种方式,但我不确定性能:

SearchRequest searchRequest = new SearchRequest(
                searchBase, 
                SearchScope.SUB, 
                Filter.createEqualityFilter("objectGuid", objectGuid)
        );
  1. 从创建请求中提取:objectGuid
    LDAPResult addResult = ldapConnectionPool.add(addRequest)

所以我的问题是:

在我们的应用程序中用作标识符是个好主意吗?性能很重要。objectGuid

乍一看,它看起来真的很有吸引力,但看起来图书馆不是为此而设计的。你觉得怎么样?

Java LDAP 标识符 unboundid-ldap-sdk dn

评论


答:

1赞 user1686 7/26/2023 #1

这看起来不错;性能应该不是问题。

  1. LDAP实际上一开始就没有“通过DN获取条目”操作 - 在后台,LDAP客户端通过使用SearchScope.BASE和DN作为基础执行搜索来模拟它。所以你在这方面没有改变任何东西;您之前有一个返回 1 个条目的搜索,现在有一个返回 1 个条目的搜索。

  2. objectGUID 属性已编制索引 – 服务器会将搜索查询优化为快速索引查找,并立即检索匹配的条目。为此,它不需要实际扫描整个子树。

评论

0赞 gstackoverflow 7/26/2023
谢谢你的回答。如何从 addResult 中检索 objectGuid ?LDAPResult addResult = ldapConnectionPool.add(addRequest)
0赞 user1686 7/26/2023
你不能 - “添加”结果中没有额外的信息;您必须按其 DN 查找(搜索)新添加的条目。还有其他“控件”(特别是postRead)可以使这成为可能,但只有一些LDAP实现支持它们,因此OpenLDAP可以,但AD则不行。