【发布时间】: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 进行身份验证。您是否尝试过删除
$ldaprdn的MED\\部分? -
是的,我试过不带反斜杠和单反斜杠,
-
我认为您必须使用
sAMAccountName=$uname,ou=som,dc=med,dc=xxx,dc=edu或仅使用MED\\$uname进行绑定。最后一个是特殊的 ActiveDirectory 功能。第一个考虑到 AD 上的唯一 id 名为 sAMAccountName 而不是 uid -
谢谢,谢谢,
MED\\$uname工作。如果您可以重写您的答案,请选择最佳答案。你救了我。