PHP 日本大会 2024

LDAP 控制

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

注意:

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

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

<?php

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

$result = ldap_read($ds, '', '(objectClass=*)', ['supportedControl']);
if (!
in_array(LDAP_CONTROL_PAGEDRESULTS, ldap_get_entries($ds, $result)[0]['supportedcontrol'])) {
die(
"此服务器不支持分页结果控制");
}

?>

从 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