LDAP 控制

控制是特殊对象,可以在 LDAP 请求时发送,以在执行请求时更改 LDAP 服务器的行为。服务器也可以在响应中发送控制,以提供更多信息,通常是为了回答来自请求的控制对象。

注意:

并非所有 LDAP 服务器都支持所有控制。要了解服务器支持哪些控制,您需要通过读取空 dn 并使用过滤器 (objectClass=*) 来查询根 DSE。

示例 #1 测试对分页结果控制的支持

<?php

// $ds 是目录服务器的有效链接标识符

$result = ldap_read($ds, '', '(objectClass=*)', ['supportedControl']);
if (!
in_array(LDAP_CONTROL_PAGEDRESULTS, ldap_get_entries($ds, $result)[0]['supportedcontrol'])) {
die(
"This server does not support paged result control");
}

?>

从 PHP 7.3 开始,您可以在所有请求函数中使用 controls 参数将控制发送到您的请求。当函数的 ext 版本存在时,如果您想访问完整的响应对象并能够使用 ldap_parse_result() 解析响应中的控制,您应该使用它。

controls 必须是一个数组,包含每个要发送的控制的数组,包含以下键

oid (字符串)
控制的 OID。您应该为此使用以 LDAP_CONTROL_ 开头的常量。请参阅 LDAP 常量
iscritical (布尔值)
如果控制被标记为关键,如果服务器不支持控制或无法应用控制,则请求将失败。请注意,某些控制应始终标记为关键,如引入它们的 RFC 中所述。默认为 false
value (混合)
如果适用,则为控制的值。阅读以下内容以了解更多信息。

大多数控制值以 BER 编码形式发送到服务器。您可以自己对值进行 BER 编码,或者您可以传递一个包含正确键的数组,以便为您完成编码。支持作为数组传递的控制如下

以下控制不需要任何值

控制 LDAP_CONTROL_PROXY_AUTHZ 是一个特殊情况,因为它不希望其值为 BER 编码,因此您可以直接使用字符串作为其值。

ldap_parse_result() 解析控制时,如果支持,值将变为数组。这对于以下内容受支持

添加说明

用户贡献的说明

此页面没有用户贡献的说明。
To Top