首页 > 解决方案 > LDAP 认证 - ldap_bind() 方法很慢

问题描述

我的应用程序对用户进行了 ldap 身份验证。

当我验证它需要很长时间才能完成大约 10 到 15 秒。如果我立即注销并再次登录。它只需要 100 毫秒或非常慢的时间。一段时间后,当我再次尝试登录时,它再次需要 10-15 秒。

当我们从我的个人 Windows 机器连接时,它非常快,但从我们的网络服务器机器上需要时间。

这个问题背后的原因可能是什么?

下面是我的代码,它成功但需要时间才能完成。如果我再次刷新此页面,它会立即发生。

ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);

            //Our Ip address \/
$l = ldap_connect("ldap://1.2.3.4:389"); 
ldap_set_option($l, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($l, LDAP_OPT_REFERRALS, 0);

//This takes very long time.
ldap_bind($l, "CN=work,OU=XX-ALL,DC=Example,DC=com", "workPassword");  
echo(ldap_error($l)."\n");

标签: phpauthenticationactive-directoryldapwindow

解决方案


值得一提的是您使用的是什么 LDAP 服务器。如果您使用的是 Windows AD/LDAP,这可能很有用:

Windows 尝试从其自己的服务器和第三方服务器检索新的 CRL(证书吊销列表)。这看起来正好在 15 秒内超时。如果机器被隔离或无法通过 Internet 访问这些资源(被阻止/防火墙、连接速度慢等),则可能会出现这种情况。

如果您的 CA/证书已经在网络服务器上可用,您可以尝试降低超时时间以查看它是否解决了问题?

我们只需要在服务器上执行以下步骤:

启动 gpedit.msc -> 本地计算机策略 -> 计算机配置 -> 管理模板 -> 系统 -> Internet 通信管理 -> Internet 通信设置 -> 关闭自动根证书更新 = 已启用

启动 gpedit.msc -> 本地计算机策略 -> 计算机配置 -> Windows 设置 -> 安全设置 -> 公钥策略 -> 证书路径验证路径。选择选项卡“网络检索”并启用“定义这些策略设置”。取消选择“自动更新根...”。最重要的是将超时值设置为 1。


推荐阅读