【发布时间】:2016-10-21 15:39:27
【问题描述】:
这里是 PHP 和 LDAP 的新手,正在寻求个人项目的帮助(尝试自学!)。
我想使用简单的登录框对我们网站上的某些页面进行密码保护。
我的 login.php 页面包含一个简单的登录表单,其中包含 username 和 password 输入。我已经设法使用下面的代码使登录过程正常工作。我可以使用我的 Active Directory 用户名/密码通过此表单登录并进入所需的页面,没有问题。
但是我不确定我是否以“正确”的方式进行操作。
我的代码;
ldap.php
session_start();
function authenticate($user, $password) {
if(empty($user) || empty($password)) return false;
$ldaphost = "ad.example.com";
$ldap_dn = "DC=ad,DC=example,DC=com";
$ldap_user_group = "Staff";
$ldap_usr_dom = '@ad.example.com';
$ldap = ldap_connect($ldaphost);
if($bind = ldap_bind($ldap, $user.$ldap_usr_dom, $password) or die ("Error: ".ldap_error($ldap))) {
$filter = "(sAMAccountName=".$user.")";
$attr = array("");
$result = ldap_search($ldap, $ldap_dn, $filter) or exit("Unable to search LDAP server") or die ("Error searching: ".ldap_error($ldap));
$entries = ldap_get_entries($ldap, $result);
ldap_unbind($ldap);
}
foreach($entries[0]['memberof'] as $grps) {
if(empty($grps) || empty($ldap_user_group)) return false;
if(strpos($grps, $ldap_user_group)) {
$access = 1;
} else {
}
}
if($access != 0) {
$_SESSION['user'] = $user;
$_SESSION['access'] = $access;
return true;
} else {
return false;
}
}
(其他人)告诉我这个特定的 LDAP 身份验证过程应该分两步进行,如下所示;
- 搜索输入的用户名。我建议您为此使用搜索用户 DN 和密码 - 具有搜索权限的用户。它在进行搜索之前与这些凭据绑定。如果搜索成功,它会检索找到的用户的 DN 和稍后将用于查找成员记录的搜索属性。
- 然后使用检索到的用户 DN 和输入的密码进行第二次绑定。如果此绑定成功,则用户已通过身份验证。
我的问题是;
- 上述说法正确吗?
- 是否需要两个“绑定”?
- 我不能只将 LDAP 连接与用户输入的凭据绑定吗?
感谢您的任何建议,我真的很难理解身份验证过程:s
【问题讨论】:
标签: php authentication active-directory ldap