PHP LDAP 身份验证失败


PHP LDAP AUTHENTICATION FAILS

我正在尝试使用PHP LDAP验证电子邮件ID和密码。只是我想进行身份验证,无需访问联系人、邮件或日历。只需要确认他是有效用户。主机名正确。端口号也正确。请帮忙。请注意我的场景

  1. 我的邮件 ID 是 xxxxx@childcompany.com,用户名是 yyyyyy
  2. 我的邮件由母公司托管和处理 (mail.parentcompany.com (

    $username = 'yyyyyy@parentcompany.com'; //If i use this line Unable to bind to server: Strong(er) authentication required 
    $username = 'yyyyyy';//If i use this line Unable to bind to server: Invalid credentials
    $username = 'xxxxx@childcompany.com' //If i use this line Unable to bind to server: Invalid credentials
    $password = 'mypassword';
    $ldap = ldap_connect("10.1.1.1",389)   ;  
    if ($ldap) 
    {   
       $ldapbind = ldap_bind($ldap,$username,$password );     
      if ($ldapbind) {
        echo "LDAP bind successful...";
     } else {
        echo "LDAP bind failed...";
     }
    

    }

让我做对,您的用户输入了他的电子邮件和密码,您想基于此对他进行身份验证吗?您提到的用户名 yyyyyyy 是您用于 LDAP 搜索连接的用户?或者用户输入 yyyyyy 作为他的用户名?

如果您的用户输入电子邮件和密码(仅(,通常要使其正常工作,如果要通过电子邮件查找最终用户,则需要一个对要与之进行绑定的目录 (yyyyy( 具有搜索权限的用户(请注意,如果允许具有相同电子邮件的多个帐户,您可能会获得多个记录(

在这种情况下,一般思路是将应用程序用户绑定到目录,通过用户的电子邮件对用户的 DN 进行 LDAP 查询,然后执行其他绑定以使用用户提供的密码测试您找到的 DN。

您还应该检查登录结构,有时用户名应该以短域为前缀,例如"mydomain''username",以便登录ldap。

由于没有简单的方法来调试绑定问题,我还使用 Wireshark/TCPDump 来监控进出 LDAP 服务器的流量(在我的情况下它没有 SSL 加密(,我可以看到发送到服务器和从服务器接收的确切内容。

看看 https://gist.github.com/heiglandreas/5689592。这是一个简单的 ldap-bind 示例,展示了如何使用任何给定属性针对 LDAP 对用户进行身份验证。也可能对你有所帮助。

我还建议您通过使用"ldapsearch"等控制台工具检查您返回的信息是否真的是您所期望的。

您也可以使用它来通过提供 ldapsearch -h <host> -D <bindDN> -W 等凭据来测试 ldap-bind 。-W 将提示输入由 <bindDN> 标识的用户的密码