LDAP 函数

目录

添加说明

用户贡献的说明 34 条说明

24
idbobby at rambler dot ru
14 年前
首先,抱歉我的英语。
以下两个函数用于检查组成员资格,以及一些其他对使用 LDAP(在本例中为 Active Directory)有用的函数。

index.php
---------

<?php

$user
= 'bob';
$password = 'zhlob';
$host = 'myldap';
$domain = 'mydomain.ex';
$basedn = 'dc=mydomain,dc=ex';
$group = 'SomeGroup';

$ad = ldap_connect("ldap://{$host}.{$domain}") or die('无法连接到 LDAP 服务器。');
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);
@
ldap_bind($ad, "{$user}@{$domain}", $password) or die('无法绑定到 AD。');
$userdn = getDN($ad, $user, $basedn);
if (
checkGroupEx($ad, $userdn, getDN($ad, $group, $basedn))) {
//if (checkGroup($ad, $userdn, getDN($ad, $group, $basedn))) {
echo "您已授权为 ".getCN($userdn);
} else {
echo
'授权失败';
}
ldap_unbind($ad);

/*
* 此函数在 LDAP 树中搜索($ad - LDAP 连接标识符)
* 通过 samaccountname 指定的条目并返回其 DN 或失败时返回空字符串。
*/
function getDN($ad, $samaccountname, $basedn) {
$attributes = array('dn');
$result = ldap_search($ad, $basedn,
"(samaccountname={$samaccountname})", $attributes);
if (
$result === FALSE) { return ''; }
$entries = ldap_get_entries($ad, $result);
if (
$entries['count']>0) { return $entries[0]['dn']; }
else { return
''; };
}

/*
* 此函数从给定 DN 中检索并返回 CN
*/
function getCN($dn) {
preg_match('/[^,]*/', $dn, $matchs, PREG_OFFSET_CAPTURE, 3);
return
$matchs[0][0];
}

/*
* 此函数检查用户的组成员身份,仅在
* 指定的组中搜索(非递归)。
*/
function checkGroup($ad, $userdn, $groupdn) {
$attributes = array('members');
$result = ldap_read($ad, $userdn, "(memberof={$groupdn})", $attributes);
if (
$result === FALSE) { return FALSE; };
$entries = ldap_get_entries($ad, $result);
return (
$entries['count'] > 0);
}

/*
* 此函数检查用户的组成员身份,在
* 指定的组及其成员组中搜索(递归)。
*/
function checkGroupEx($ad, $userdn, $groupdn) {
$attributes = array('memberof');
$result = ldap_read($ad, $userdn, '(objectclass=*)', $attributes);
if (
$result === FALSE) { return FALSE; };
$entries = ldap_get_entries($ad, $result);
if (
$entries['count'] <= 0) { return FALSE; };
if (empty(
$entries[0]['memberof'])) { return FALSE; } else {
for (
$i = 0; $i < $entries[0]['memberof']['count']; $i++) {
if (
$entries[0]['memberof'][$i] == $groupdn) { return TRUE; }
elseif (
checkGroupEx($ad, $entries[0]['memberof'][$i], $groupdn)) { return TRUE; };
};
};
return
FALSE;
}

?>
10
oscar dot php at linaresdigital dot com
9 年前
关于 accountExpires、pwdLastSet、lastLogon 和 badPasswordTime 活动目录字段有很多困惑。

它们都使用“间隔”日期/时间格式,其值表示自 1601 年 1 月 1 日(UTC)以来的 100 纳秒间隔数(值为 0 或 0x7FFFFFFFFFFFFFFF、9223372036854775807 表示帐户永不过期):https://msdn.microsoft.com/en-us/library/ms675098(v=vs.85).aspx

因此,如果您需要将其从 UNIX 时间戳转换或转换回 UNIX 时间戳,您可以轻松地计算出差异:

<?php
$datetime1
= new DateTime('1601-01-01');
$datetime2 = new DateTime('1970-01-01');
$interval = $datetime1->diff($datetime2);
echo (
$interval->days * 24 * 60 * 60) . " 秒\n";
?>

这两个日期之间的差异是 11644473600 秒。不要依赖浮点计算或可能计算错误的其他数字(包括时区或类似的东西)。

现在您可以从 LDAP 字段进行转换:

<?php
$lastlogon
= $info[$i]['lastlogon'][0];
// 除以 10.000.000 以从 100 纳秒间隔中获得秒数
$winInterval = round($lastlogon / 10000000);
// 从 1601-01-01 中减去秒数 -> 1970-01-01
$unixTimestamp = ($winInterval - 11644473600);
// 在本地时区显示日期/时间
echo date("Y-m-d H:i:s", $unixTimestamp) ."\n";
?>

希望对您有所帮助。
3
maykelsb at yahoo dot com dot br
17 年前
W2k3 中 ldap_search 问题可以通过添加以下内容来解决:

// -- $conn 是有效的 ldap 连接。

ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($conn, LDAP_OPT_REFERRALS,0);

在 ldap_bind 之前,如 http://bugs.php.net/bug.php?id=30670. 中所述。
3
gcathell at thetdgroup dot com
18 年前
我最近需要使用 PHP 通过 SSL 访问 Microsoft Active Directory 服务器作为 LDAP 服务。我花了很长时间才找到所有需要的信息才能使其正常工作。

我试图在这里发布一篇包含详细信息的帖子,但它最终变得太长了。我将详细信息放在以下 URL 中,希望其他人能从中受益,并能够比我更快地解决问题。

http://greg.cathell.net/php_ldap_ssl.html

祝你好运!
4
spam2004 at turniton dot dk
19 年前
这里有两个小函数,可以将 Microsoft AD 中的二进制对象 SID 转换为更实用的文本版本(格式为 (S-1-5.....))。

// 将小端序十六进制数字转换为 'hexdec' 可以转换的数字
function littleEndian($hex) {
for ($x=strlen($hex)-2; $x >= 0; $x=$x-2) {
$result .= substr($hex,$x,2);
}
return $result;
}

// 返回文本 SID
function binSIDtoText($binsid) {
$hex_sid=bin2hex($binsid);
$rev = hexdec(substr($hex_sid,0,2)); // 获取 SID 的修订部分
$subcount = hexdec(substr($hex_sid,2,2)); // 获取子身份验证条目的计数
$auth = hexdec(substr($hex_sid,4,12)); // SECURITY_NT_AUTHORITY
$result = "$rev-$auth";
for ($x=0;$x < $subcount; $x++) {
$subauth[$x] = hexdec(littleEndian(substr($hex_sid,16+($x*8),8))); // 获取所有 SECURITY_NT_AUTHORITY
$result .= "-".$subauth[$x];
}
return $result;
}

echo binSIDtoText($bin_sid);
1
hijinio at comcast dot net
19 年前
如果有人在 Solaris 10 盒子上配置 PHP 与 LDAP 支持时遇到问题,以下是我使用的配置行

./configure --with-nsapi=/opt/SUNWwbsvr --enable-libgcc --disable-libxml --with-ldap=/usr/local --prefix=/opt/php/php-5.0.4

需要注意的重要部分是 --with-ldap= 所使用的位置;对于大多数 S10 用户来说,将是 "--with-ldap=/usr/local"。
1
Richie Bartlett(at)ITsystems-Online com
19 年前
这是对 <i>wtfo at technocraft dot com</i>(2002 年 5 月 23 日 03:40)的更新... 此函数允许额外的(可选)参数。先前列出的函数在成功身份验证后未能关闭 ldap 连接。

<?php
function checkNTuser($username,$password,$DomainName="myDomain",
$ldap_server="ldap://PDC.example.net"){//v0.9
// 当用户/密码能够绑定到 LDAP(Windows 2k)时返回 true。
$auth_user=$username."@".$DomainName;
#echo $auth_user."->";
if($connect=@ldap_connect($ldap_server)){
#echo "connection ($ldap_server): ";
if($bind=@ldap_bind($connect, $auth_user, $password)){
#echo "true <BR>";
@ldap_close($connect);
return(
true);
}
//if bound to ldap
}//if connected to ldap
#echo "failed <BR>";
@ldap_close($connect);
return(
false);
}
//end function checkNTuser
?>
1
ant at solace dot mh dot se
20 年前
在使用 LDAP 时,值得记住的是大多数
LDAP 服务器将它们的字符串编码为 UTF-8。这意味着
对于非 ASCII 字符串,您需要使用 utf8_encode 和
utf8_decode 函数来创建 LDAP 服务器的过滤器。

当然,如果可以,只需避免使用非 ASCII 字符
但对于大多数站点,用户喜欢看到他们奇怪的本机字符
集,包括变音符号等。

如果您只是在期望非 ASCII 字符的地方得到?字符,那么
您可能只需要升级您的 PHP 版本。
2
christopherbyrne at hotmail dot com
18 年前
对于任何在阅读以下文章后在 Active Directory 中使用 "accountexpires" 属性时遇到问题的人

www.microsoft.com/technet/scriptcenter/
resources/qanda/sept05/hey0902.mspx

或类似的内容,这可能会让你省去一些沮丧。在文章中,提到这个属性是一个整数,代表自 1601 年 1 月 1 日 00:00:00 以来经过的纳秒数。

然而,"accountexpires" 属性实际上似乎是自 1600 年 12 月 31 日 14:00:00 以来经过的 100 纳秒增量的数量。因此,如果你将整数除以 10,000,000 并减去 11644560000,你将得到一个与 AD 中的日期相匹配的 Unix 时间戳。

要设置 "accountexpires" 日期,只需反转此过程,即获取所需的新的日期的时间戳,添加 11644560000 并乘以 10,000,000。你还需要格式化结果数字,以确保它不会以科学记数法输出,以便 AD 能够接受它。

希望这有帮助!
2
llurovi at gmail dot com
7 年前
对于那些在用户密码包含特殊字符时遇到问题的人,请确保将字符串解码为合适的编码。例如,我遇到了一个问题,一些用户无法正常登录到我们的 Web 应用程序。

简单连接的示例

<?php

$ldap_ip
= 'LDAP-SERVER-IP';
$ldap = ldap_connect($ldap_ip);

$user = 'Test';
$password = 'otoño'; // 此密码正确,但使用此格式绑定它将导致错误

$password = utf8_decode($password); //$password = otoxF1o

$ldap_bind = ldap_bind($ldap, $user, $password); // 现在绑定成功,并且 $ldap_bind = true

?>
2
unroar at gmail dot com
17 年前
在 Solaris 9 中,libnet 库是使用 LDAP、SASL 和 SSL 构建 PHP 的先决条件(libnet 在 Sunfreeware 上可用)。

我在任何地方都没有看到提到这一点,我不确定它是 LDAP、SASL 还是 SSL 需要的。我在 Google 上花了一个小时,但没有找到答案,直到我自己找到了。也许这条评论会帮助下一个在 Google 上搜索的人。

错误是:
ld: fatal: library -lnet: not found
ld: fatal: File processing errors. No output written to sapi/cli/php
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1
1
alex at netflex dot nl
16 年前
如果你想在 Windows 上使用 ldaps,但不想验证 tls 证书,请在 ldap_connect 调用之前尝试以下代码行

putenv('LDAPTLS_REQCERT=never') or die('Failed to setup the env');
2
jabba at zeelandnet dot nl
19 年前
在 Windows 上使用 PHP 时,如果你尝试连接(绑定)到需要安全连接(LDAPS)的 Netware(6)LDAP 服务器,PHP 将返回一条消息,指出找不到服务器。

对连接尝试期间发生的流量进行网络流量捕获显示,服务器提供了一个证书用于 SSL 连接,但该证书被客户端拒绝(***bad certificate SSLv3 packet))。

造成这种情况的原因可能是 PHP LDAP 实现试图使用颁发证书的 CA 验证接收到的证书。可能有一种方法可以使此验证成功,但也可以通过创建 openldap(令人惊讶的是!!)配置文件来禁用客户端(在本例中是 PHP)的此验证。

此配置文件的位置似乎在 Windows 的 LDAP 支持模块中是硬编码的,你可能需要手动创建以下目录结构

C:\openldap\sysconf\

在 sysconf 文件夹中,创建一个名为 'ldap.conf' 的文本文件(你可以使用记事本),并添加以下行到 ldap.conf 文件中,以禁用证书验证

TLS_REQCERT never

在此之后,所有正常的 ldap_bind 调用都将工作,前提是你的用户 ID 和密码正确。
1
Sami Oksanen
20 年前
我编辑了 Jon Caplinger 的代码,该代码位于下方(日期:2002 年 11 月 9 日 05:44)。

- 我更正了代码行
"if (!($connect=@ldap_connect($ldap))) {" 改为
"if (!($connect=@ldap_connect($ldap_server))) {"

- 删除了 $name 属性

- "Name is:" 字段始终是一个数组,因此我将打印行更改为
" echo "Name is: ". $info[$i]["name"][0]."<br>";"

我还添加了一些备选搜索过滤器以供尝试。

以下是代码

<?php

$ldap_server
= "ldap://foo.bar.net";
$auth_user = "[email protected]";
$auth_pass = "mypassword";

// 设置要搜索的整个目录的基 dn。

$base_dn = "DC=bar, DC=net";

// 仅显示用户人员
$filter = "(&(objectClass=user)(objectCategory=person)(cn=*))";

// 启用仅显示用户
// $filter = "(&(objectClass=user)(cn=$*))";

// 启用显示所有内容
// $filter = "(cn=*)";

// 连接到服务器

if (!($connect=@ldap_connect($ldap_server))) {
die(
"无法连接到 ldap 服务器");
}

// 绑定到服务器

if (!($bind=@ldap_bind($connect, $auth_user, $auth_pass))) {
die(
"无法绑定到服务器");
}

//if (!($bind=@ldap_bind($connect))) {
// die("无法绑定到服务器");
//}

// 搜索活动目录

if (!($search=@ldap_search($connect, $base_dn, $filter))) {
die(
"无法搜索 ldap 服务器");
}

$number_returned = ldap_count_entries($connect,$search);
$info = ldap_get_entries($connect, $search);

echo
"返回的条目数为 ". $number_returned."<p>";

for (
$i=0; $i<$info["count"]; $i++) {
echo
"姓名是: ". $info[$i]["name"][0]."<br>";
echo
"显示名称是: ". $info[$i]["displayname"][0]."<br>";
echo
"电子邮件是: ". $info[$i]["mail"][0]."<br>";
echo
"电话号码是: ". $info[$i]["telephonenumber"][0]."<p>";
}
?>
2
ben_demott at hotmail dot com
16 年前
对于任何是程序员但对 Microsoft Active Directory 中的命名约定或如何在目录中查找对象,或者更重要的是如何引用对象不熟悉的人。
从命令行运行“adsiedit.msc”将以易于阅读和复制的命名格式显示目录中的所有对象。
希望这有帮助!

注意
您必须从 AD 域控制器运行此命令
您必须安装 Windows 资源工具包
(不允许我创建如此长的链接,所以我不得不进行链接中断 - 对不起!)
a http://www.microsoft.com/downloads/details.aspx
?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en

安装此工具应该会修改您的系统路径,因此您只需从运行对话框中键入命令即可,否则绝对路径为
C:\Program Files\Windows Resource Kits\Tools\adsiedit.msc
2
nacenroe at remove dot this dot nystec dot com
18 年前
如果您想使用 PHP 将 LDAP 与 AD 集成(我正在使用 Win2K3),您可能需要修改 Win2k 和 Win2K3 中包含的 LDP.exe 工具(不需要资源工具包!!)。您可以在命令行中直接运行此应用程序。

Win2K3 帮助功能是一个很好的起点,然后它将我指向 M$ KB 中的一篇文章:http://support.microsoft.com/default.aspx?scid=kb;en-us;255602(XADM:使用 LDP 实用工具浏览和查询)。

所以... 如果您的连接/绑定正在工作,但您的查询没有,您可能需要从这里开始。当我在本地 AD 上运行它时,我发现它非常有用,可以查看属性等。
2
christopherbyrne at hotmail dot com
18 年前
只是对我的上一篇文章进行一下修正:我的计算使用的是澳大利亚东部时间(GMT+10),而 Unix 时间戳使用的是 GMT。因此,Active Directoy 的“accountexpires”整数值确实从 1601 年 1 月 1 日 00:00:00 GMT 开始,此日期与 1970 年 1 月 1 日 00:00:00 GMT 之间的秒数为 11644524000。

但是增量仍然绝对是 100 纳秒!
2
jpmens at gmail dot com
19 年前
补充说明一下 jabba at zeelandnet dot nl 的说明。如果您尝试使用 OpenLDAP 连接到 LDAPS URI,您可以根据 jabba 的描述创建配置文件,或者也可以使用环境设置将 LDAPTLS_REQCERT=never 设置为 ldap.conf(5) 中所述。
2
knitterb at blandsite dot org
22 年前
在使用 PHP 4.2.1 与 OpenLDAP 2.1.2 时,我遇到了绑定到 ldap 服务器的问题。我发现 php 使用的是旧协议,并在 slapd.conf 中添加了以下内容

allow bind_v2

有关 slapd.conf 文件中 allow 项的更多信息,请参阅“man slapd.conf”,这是我所知道的全部!:)
1
Jimmy Wimenta Oei
19 年前
如果您想禁用/启用追溯引用选项,您需要先将协议版本设置为版本 3,否则 LDAP_OPT_REFERRALS 选项将不会生效。这对于查询 MS Active Directory 尤其如此。

<?php
ldap_set_option
($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
?>

与往常一样,这些应该在连接后但绑定之前调用。
0
Andrew Sharpe
12 年前
要在 RHEL 6.2 x86_64 上编译 PHP 5.1.6,请在您的配置命令中添加以下内容

--with-libdir=lib64
--with-ldap=/usr
1
pookey at pookey dot co dot uk
20 年前
这是查询 LDAP 服务器并打印所有条目的示例。

<?php

$ldapServer
= '127.0.0.1';
$ldapBase = 'DC=anlx,DC=net';

/*
* 尝试连接到服务器
*/
$ldapConn = ldap_connect($ldapServer);
if (!
$ldapConn)
{
die(
'无法连接到 LDAP 服务器');
}

/*
* 匿名绑定
*/
$ldapBind = ldap_bind($ldapConn);
if (!
$ldapBind)
{
die(
'无法绑定到 LDAP 服务器');
}

/*
* 设置 ldap 选项
*/
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);

/*
* 搜索 LDAP 服务器
*/
$ldapSearch = ldap_search($ldapConn, $ldapBase, "(cn=*)");
$ldapResults = ldap_get_entries($ldapConn, $ldapSearch);

for (
$item = 0; $item < $ldapResults['count']; $item++)
{
for (
$attribute = 0; $attribute < $ldapResults[$item]['count']; $attribute++)
{
$data = $ldapResults[$item][$attribute];
echo
$data.":&nbsp;&nbsp;".$ldapResults[$item][$data][0]."<br>";
}
echo
'<hr />';
}

?>
1
greatsafari at hotmail dot com
21 年前
看到这么多连接和查询 Active Directory 服务器的方法,我真的怀疑整个过程是否依赖于 Active Directory 的配置。看看这篇文章

http://www.phpbuilder.com/mail/php-general/2003022/1459.php

在某些情况下被证明可行的方法在其他情况下却失败了。
1
nliu99 at nospam dot yahoo dot com
21 年前
libsasl.dll 不是 ldap 功能所必需的。请查看这篇文章:http://bugs.php.net/bug.php?id=9485

在 win2k 上,我按照这些简单的步骤操作,ldap 就可以正常工作了
1. 将 php_ldap.dll 从扩展文件夹复制到 winnt/system32。
2. 编辑 winnt/php.ini 文件,启用 ldap(取消注释该行)。
3. 重启 IIS。
就是这样,祝您使用 ldap 玩得开心。

关于 Microsoft Active Directory 的说明
1. 您可以使用用户电子邮件登录,例如 [email protected]
2. 使用 ldap_search 通过筛选 (userprincipalname=[user]) 搜索用户信息最简单。
1
egeczi at nospamplease dot dist113 dot org
21 年前
在运行 IIS 的 Win2k Server 上,仅仅在启用 php_ldap 扩展后重启 IIS 是不够的,您需要重启服务器本身。
1
yorch at correo dot ath dot cx
21 年前
关于在 Win2k 机器上运行 LDAP 扩展的一些说明

在将 php_ldap.php 和 libsasl.dll 复制到所有可能的目录(c:\WinNT\System32、c:\php ...)后,我决定阅读 installation.txt 文件。
安装 php 扩展的说明中写道:"某些 php 扩展需要一些额外的 dll 文件。请将捆绑的 dll 文件从分发包中的 'dlls/' 目录复制到您的 windows/system (Win9.x) 或 winnt/system32 (WinNT、Win2000、XP) 目录。如果您已经在系统上安装了这些 dll 文件,只有在某些功能无法正常工作的情况下才覆盖它们。"

所以我照做了:将 "c:\php\dlls" 中的所有 dll 文件复制到 "c:\WinNT\System32"。
现在它们加载得很好 ;-)

希望这对其他人有帮助。
0
Tod
17 年前
针对在 Win2k3 上运行 PHP 4 和 Apache 2.2 的用户的说明。
为了让 ldap_connect 返回结果,Apache 服务需要以本地管理员帐户运行。这与在 Active Directory 域中的服务器上可能出现的域管理员帐户不同。

它看起来似乎可以正常工作,但实际上会返回空结果。

因此,在服务登录属性中使用 (server name)\administrator 作为用户名。

Tod
0
jector at inbox dot ru
17 年前
我花了一些时间修复了 "无法加载动态库 'php_ldap.dll'。" 我将 libeay32.dll 和 ssleay32.dll 复制到所有地方,但错误仍然存在。

在深入研究了所有这些 dll 文件后,我发现 libeay32.dll 和 ssleay32.dll 都需要 msvcr70.dll(或 msvcr71.dll,这取决于编译器版本)。然后,只需将该 dll 复制到 system32\ 目录中,它就可以完美运行了。
0
nigelf at esp dot co dot uk
17 年前
在 Active Directory 中跟踪引用(例如:跨域搜索)可能会很慢。您可以像下面这样在 GC(全局目录)中查找对象。

在使用 ldap_connect 时,删除对 ldap:// 的任何引用,例如:使用 "serv1.mydom.com" 而不是 "ldap://serv1.mydom.com"。

连接到端口 3268(而不是默认的 389)。

将搜索的基本 DN 设置为 null,即 ""(空引号)。

然后,AD 将在 GC 上运行搜索,GC 存储了整个林中所有对象的副本。您还可以检索属性子集(包括组成员身份,但本地组除外)。

要获取完整的属性集,您仍然需要跟踪引用。
0
hkemale at hkem dot com
21 年前
适用于 IIS+PHP+NTFS 文件系统用户
在将 <php_dir>/dlls/*.dll 复制到 <windows>/systems32/ 后,请记住为 "everyone" 和扩展 *.dll 添加读写执行权限。这可以防止出现 php_ldap.dll 访问被拒绝的警告。
0
gerbille at free dot fr
21 年前
PHP 的 MD5 返回以 base16 编码的结果。但是 LDAP MD5 返回以 base64 编码的字符串。
$pwd="toto";
$pwd_md5=base64_encode(mhash(MHASH_MD5,$pwd));
只需在 $pwd_md5 前面添加 "{MD5}" 即可获得与 LDAP 目录相同的格式。

再见
奥雷莉亚
0
mike at whisperedlies dot org
21 年前
除了上面的 netBIOS 建议外,在绑定到 Windows2k AD 服务器时,您可以使用目标用户的 UPN。例如,如果您的 SAM 帐户名称是 firstname.lastname,并且您的域是 domainname.com,那么您的 UPN 可能是 [email protected]

这可以用于绑定到 AD。我在任何方法中都没有发现任何区别。
0
rusko dot marton at gibzone dot hu
22 年前
您可以使用用户名简化的 netbios 形式轻松地向 Windows 2000 域的 ldap 服务器进行身份验证。

有人写道
在向 Win2k LDAP 服务器进行身份验证时,人员的名称必须是
dn 中的完整名称

不。您可以使用以下形式

$user = "DOMAINNAME\\username"
$password = "Password_of_user";

if (!$connect = ldap_connect("<server>", <port>)) {
//错误
exit;
}
if (!$res = @ldap_bind($ldap, $user, $password)) {
//错误
exit;
}

它在 Active Directory 中运行良好,我们正在使用它。
0
webmaster at autourdupc dot com
22 年前
在向 Win2k LDAP 服务器进行身份验证时,人员的名称必须是 dn 中的完整名称

注意:没有区分大小写!

$dn="cn=DUPOND John, cn=Users, dc=autourdupc, dc=com"
$password = "Password_of_DUPOND";

然后,在绑定到 LDAP 数据库时,您使用

if (!($ldap = ldap_connect("<server>", <port>))) {
die ("无法连接到 LDAP 服务器");
}
if (!($res = @ldap_bind($ldap, $dn, $password))) {
die ("无法绑定到 $dn");
}

希望这对每个人都有用!
To Top