【发布时间】:2021-06-17 13:29:06
【问题描述】:
这是我第一次需要使用远程 Active Directory 对我的 PHP 应用程序上的用户进行身份验证。我在网上找到了一个测试服务器this link,并编写了一些代码来连接到服务器并在测试模式下进行身份验证:
$ldap_server = 'www.zflexldap.com';
$ldap_server_port = 389;
$ldap_username = 'guest1';
$ldap_password = 'guest1password';
$ldap_base_dn = 'ou=users,ou=guests,dc=zflexsoftware,dc=com';
$ldap_connection = ldap_connect($ldap_server, $ldap_server_port);
if ($ldap_connection === false) {
echo 'Connection failed';
} else {
echo 'Connected<br>';
}
ldap_set_option($ldap_connection , LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap_connection , LDAP_OPT_REFERRALS, 0);
$bind = ldap_bind($ldap_connection, 'uid='.$ldap_username.','.$ldap_base_dn, $ldap_password);
if ($bind) {
echo 'Successful login';
} else {
echo 'Failed login';
}
执行这段代码的结果是:
连接
登录成功
之后,我在虚拟机上创建了一个真正的 Active Directory Server,并在该服务器中定义了如下用户:
然后,我将连接变量更改为以下几行:
$ldap_server = 'SERVER_IP';
$ldap_server_port = 389;
$ldap_username = 'test1';
$ldap_password = 'test1_password';
$ldap_base_dn = 'ou=users,dc=website,dc=com'; // Imagine domain as website.com on AD
现在,当我想连接到 ldap 服务器并对用户 test1 进行身份验证时,我得到了以下结果:
连接
警告:ldap_bind():无法绑定到服务器:第 25 行的 index.php 中的凭据无效
登录失败
我确定用户名和密码正确。我想问题可能出在base_dn,但是当我检查服务器设置时,我在我的代码中写的内容没有发现任何错误。
你能帮我解决这个问题吗?
【问题讨论】:
-
您是在 Windows 还是 Linux 上运行 PHP 代码?我问是因为如果您使用 IIS 运行 PHP,您可以在 IIS 中使用集成的 Windows 身份验证来检查用户与 AD,然后 PHP 可以访问他们的身份 - 比上述方法容易得多。
-
@ADyson 我在 Windows 和 Linux 服务器上运行代码,但通过 Apache Web 服务器。
-
您应该仍然可以按照stackoverflow.com/a/34136128/5947043 进行操作,以使 Windows 身份验证与 Apache 一起工作。这是您应该在网络服务器级别而不是应用程序级别执行的操作。另见httpd.apache.org/docs/2.4/mod/mod_authnz_ldap.html
-
问题不在于 PHP 模块。正如我在第一次测试中提到的那样,它运作良好。在我在服务器 #1 上成功进行身份验证的同一台 Web 服务器上,我遇到了服务器 #2 的问题。
-
你误会我了。我提出了一种完全不同(但更传统)的方法,它根本不涉及您上面的任何代码,只是您的网络服务器中的一些配置。
标签: php authentication active-directory ldap