【问题标题】:PHP - ldap_bind returns invalid credentialsPHP - ldap_bind 返回无效凭据
【发布时间】:2015-07-10 18:51:30
【问题描述】:

我正在尝试制作一个使用 LDAP 服务器进行身份验证的登录页面。 我使用以下信息,它适用于 LDAP 客户端。

Host: ldap.med.xxx.edu
Port: 389
Protocol: v3
Base DN: ou=som,dc=med,dc=xxx,dc=edu
Security level: User + Password
User DN: MED\myusername
Password: mypassword

然后我有以下代码:

function ldap_authentication($uname, $password)
{
    $ldaprdn = "uid=MED\\$uname,ou=som,dc=med,dc=xxx,dc=edu";
    $ldappass = "$password";
    ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
    $ldapconn = @ldap_connect("ldap.med.xxx.edu",389) or die("Cannot connect to LDAP server!");
    ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
    if($ldapconn)
    {
        $ldapbind = @ldap_bind($ldapconn, $ldaprdn, $ldappass);
        if($ldapbind)
        {
            return "Success...";
        }
        else
        {

            return "Failed to bind..." . ldap_error($ldapconn);
        }
    }
    else {
        return "Cannot Connect";
    }
    return "Unknown error...";
}

现在这个 PHP 代码返回“绑定失败...无效的凭据”

知道我在这里做错了什么吗?

【问题讨论】:

  • 这看起来像您正在尝试针对 ActiveDirectory 进行身份验证。您是否尝试过删除$ldaprdnMED\\ 部分?
  • 是的,我试过不带反斜杠和单反斜杠,
  • 我认为您必须使用sAMAccountName=$uname,ou=som,dc=med,dc=xxx,dc=edu 或仅使用MED\\$uname 进行绑定。最后一个是特殊的 ActiveDirectory 功能。第一个考虑到 AD 上的唯一 id 名为 sAMAccountName 而不是 uid
  • 谢谢,谢谢,MED\\$uname 工作。如果您可以重写您的答案,请选择最佳答案。你救了我。

标签: php ldap


【解决方案1】:

我认为您必须使用sAMAccountName=$uname,ou=som,dc=med,dc=xxx,dc=edu 或仅使用MED\\$uname 进行绑定。

最后一个是特殊的 ActiveDirectory 功能。第一个考虑到 AD 上的唯一 id 名为 sAMAccountName 而不是 uid

【讨论】:

  • 再次感谢先生。
【解决方案2】:

我在尝试通过 LDAP 登录 Active Directory 时遇到了类似的问题,但仅针对某些用户。我曾尝试使用/删除带有单反斜杠和双反斜杠的domain_prefix\,但无济于事。我尝试过的每个帐户都验证了登录凭据,但只有一个(我的,奇怪的是)有效,而其他具有或多或少权限、不同或相同组的其他帐户都失败了。我发现该问题的解决方案是:存储 RDN 的变量 $ldaprdn 采用以下格式:

$ldaprdn = "xxx\\{$username}";

由于某种原因,这对我以外的所有帐户都失败了(运行我正在处理的 Intranet 站点的 Web 服务器在我的工作站上,这可能相关也可能不相关),但对于所有其他用户都失败了。通过将 RDN 字符串更改为:

$ldaprdn = "xxx\\$username";

它现在适用于所有有效帐户。我完全不知道为什么会这样,或者为什么所有为我保存的登录凭据都失败了,或者为什么移除大括号“修复”了问题。如果有人知道为什么这种看似微不足道的变化会产生如此奇怪的影响,我会全神贯注。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多