You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP连接Active Directory认证失败问题求助

解决LDAP绑定提示"Invalid credentials"的问题

你遇到的这个问题在AD LDAP绑定场景里挺常见的——虽然LDAP连接能成功建立,但身份验证一直失败。结合你的环境(已加入域的Win7 XAMPP)和代码细节,我给你几个按优先级排序的排查修复方向:

1. 先搞定DN的问题(最可能的元凶)

你自己也对DN参数存疑,这确实是AD绑定失败的高频原因:

  • AD里用户的DN通常需要包含所在的OU(组织单元),不是直接跟在DC后面。比如如果你的用户在Users OU下,正确的DN应该是:
    $ldap_dn = "CN=Alfred Pecora,OU=Users,DC=xxx,DC=xxx,DC=xxx,DC=xxx,DC=xxx";
    
  • AD里uid字段基本不用于登录,你用的pecal这类登录名对应的是sAMAccountName属性。如果想用登录名拼接DN,应该用sAMAccountName而非uid;或者更简单的方式——直接用域\用户名格式作为绑定DN,这种方式比拼接完整DN靠谱得多:
    $ldap_dn = "YOUR_DOMAIN\\pecal"; // 注意反斜杠要转义,用单引号可写为'YOUR_DOMAIN\pecal'
    

2. 调整LDAP连接的关键选项

AD LDAP默认的引用跟随经常会搞砸绑定流程,你需要在设置协议版本后加上这一行:

ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0);

调整后的完整连接配置部分:

$ldap_con = ldap_connect("xxx", 389);
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0); // 必须添加这一行

3. 确认用户名和密码没踩基础坑

别嫌麻烦,先排除最基础的错误:

  • 去AD用户属性的「账户」标签确认,pecal确实是该用户的sAMAccountName(有时候显示名和登录名并不一致)
  • 先手动硬编码密码测试,比如把$ldap_password改成用户的真实密码,排除POST传递时的字符转义问题(比如密码里有\、引号这类特殊字符)

4. 试试NTLM绑定(适合域内机器)

因为你的机器已经加入公司域,还可以用NTLM身份验证模式,这种方式不需要纠结DN格式,代码示例:

$ldap_con = ldap_connect("xxx", 389);
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0);

// 开启NTLM认证模式
ldap_set_option($ldap_con, LDAP_OPT_AUTH_MECH, "NTLM");

// 用域\用户名+密码绑定
if(ldap_bind($ldap_con, "YOUR_DOMAIN\\{$_POST['username']}", $_POST['password'])){
    echo "Autenticato";
}else{
    echo "Autenticazione Fallita <br>";
    echo ldap_error($ldap_con);
}

建议你先尝试第1和第2点的组合——用域\用户名格式绑定+关闭引用,这两个调整解决了我遇到的大部分AD LDAP绑定问题。

内容的提问来源于stack exchange,提问作者Max79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:37:31