使用 PHP 连接活动目录或 LDAP

Connect an active directory or LDAP with PHP

我正在尝试将 window 的活动目录或 LDAP 与 PHP 中创建的应用程序 (GLPI) 连接。

连接参数:

正在连接服务器:

$ds = ldap_connect($host, $port) // return true

@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);

@ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);

@ldap_set_option($ds, LDAP_OPT_DEREF, $deref_options);

将连接与服务器和用户及密码相关联

ldap_bind ($ds, $ login, $ password)

returns我:

"Can not contact LDAP server"

我想知道该错误消息会发生什么,因为在第一种方法中它 returns 对我来说是正确的,这意味着如果它连接到服务器。

RootDN 这很好,并且拥有我正在使用的用户的所有权限。

默认服务器没问题,我做了 pingtelnet

注意:我已经下载了 LDAPExplorer 并建立了没有问题的连接。

缺失的 : $ds = ldap_connect ... 是否与您的代码中的一样?

它应该是这样的:

$ds = ldap_connect($host, $port);

@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);

@ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);

@ldap_set_option($ds, LDAP_OPT_DEREF, $deref_options);

ldap_bind ($ds, $login, $password)

ldap_connect 连接到服务器,如 docs 中明确说明的那样。它只是创建一个资源并检查给定的值是否合理。实际连接是使用需要连接到服务器的第一个命令建立的。在这种情况下 ldap_bind.

顺便说一句:"first method" 不是 return true 而是一个资源句柄。只有当你传递一些绝对不可解析的东西时,它才会 return false。但是从来没有true

我建议使用 LDAP-URI 而不是 $host, $port 变体,因为 PHP-library 必须这样做,否则在内部。这是 f.e 的唯一途径。建立 LDAPS 连接。

好的,我的问题的解决方案是从 GLPI 版本 9.3.0 升级到 9.3.3。

建议:

  • 对于用户来说,这可能会发生什么,请验证 GLPI 通知有关待处理安装包的消息。所以我选择了更新并且连接正常工作。

  • 对于无法更新版本的用户,请确认apache包是pending to install或update,同样在setup的安装过程中,要非常小心安装整个似乎pending的列表。

要通过安装 9.3.3 版本修复一些错误:

chown -R apache: apache glpi / files

chmod -R 755 glpi / files

chown -R apache: apache config

chmod -R 755 glpi / config

还有:

setsebool -P httpd_can_network_connect_db 1

谢谢。