PHP - ldap_bind返回无效凭据

时间:2015-07-10 18:51:30

标签: php ldap

我正在尝试创建一个使用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代码返回"无法绑定...无效的Credenitials"

知道我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

我认为您必须使用sAMAccountName=$uname,ou=som,dc=med,dc=xxx,dc=eduMED\\$uname作为绑定。

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

答案 1 :(得分:0)

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

$ExcludedPaths = @(Import-Csv -LiteralPath 'D:\ExclusionList.csv') |Select-Object -Expand ExcludedPaths $ExcludedFiles = @(Import-Csv -LiteralPath 'D:\ExclusionList.csv') |Select-Object -Expand ExcludedFiles $Filter = { $FullName = $_.FullName -not($ExcludedPaths|Where-Object { $FullName -like "$_*" }) } $SourceFiles = Get-ChildItem -Recurse -Path $SourceDir -Exclude $ExcludedFiles -Force | Where-Object -FilterScript $Filter $DestFiles = Get-ChildItem -Recurse -Path $DestDir -Exclude $ExcludedFiles -Force | Where-Object -FilterScript $Filter

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

domain_prefix\

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