0

有没有人成功使用带有 ldapjs 的服务器端排序控件?文档没有提供任何创建/使用此类控制对象的具体示例。

我已经在 openldap 服务器端启用了覆盖,但似乎无法为客户端控件提供正确的格式。我不确定 Buffer 值的正确格式来创建RFC 2891中提到的 SortKeyList

 const stringBuf = Buffer.from( 'uid' );

            // The LDAP the Server-Side Sorting Control
            const controls = new ldap.ldapjs.Control( {
                "type": "1.2.840.113556.1.4.473",
                "criticality": true,
                "value": stringBuf
            } );

我收到以下错误:

searchErr: TypeError: argument must be a string (was: object)
at Writer.writeString (/srv/node_modules/asn1/lib/ber/writer.js:134:11)
at Control.toBer (/srv/node_modules/ldapjs/lib/controls/control.js:50:27)
at /srv/node_modules/ldapjs/lib/messages/message.js:99:9
at Array.forEach (<anonymous>)
at SearchRequest.LDAPMessage.toBer (/srv/node_modules/ldapjs/lib/messages/message.js:98:19)
at Client._sendSocket (/srv/node_modules/ldapjs/lib/client/client.js:1255:31)
at Client._send (/srv/node_modules/ldapjs/lib/client/client.js:1148:17)
at sendRequest (/srv/node_modules/ldapjs/lib/client/client.js:607:17)
at Client.search (/srv/node_modules/ldapjs/lib/client/client.js:636:5)
at client.starttls (/srv/nodeserver.dev/ldap.js:105:24)

我咨询了函数 ldapjs.ServerSideSortingRequestControl (选项)函数 ldapjs.Control (选项)无济于事。

4

1 回答 1

0

我终于通过从通用ldapjs.Control切换到特定ldapjs.ServerSideSortingRequestControl来完成这项工作

您可以只提供 SortKeyList 的值。类型 OID 将由函数附加。可以省略关键性。

const control = { "value": { "attributeType": "uid", "orderingRule": "CaseIgnoreOrderingMatch" } };

const controls = new ldap.ldapjs.ServerSideSortingRequestControl( control );

但请注意,这不是一个非常高效的解决方案

于 2020-09-01T18:08:00.473 回答