这里有很多新的PHP和LDAP,寻求个人项目的帮助(试着自学!)。
我想使用简单的登录框密码保护我们网站上的某些页面。
我的 login.php 页面包含一个简单的登录表单,其中包含用户名和密码输入。我已设法使用下面的代码使登录过程正常工作。我可以使用我的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身份验证过程应分两步完成,如下所示;
我的问题是;
任何建议都表示赞赏,我很难真正理解认证过程:s
答案 0 :(得分:1)
简短回答:
答案很长: 目前,您只能绑定用户的用户名和电子邮件地址。这只适用于AD作为后端。所以,当你想做一个AD-Authenticator时,那没关系。但是你特别要求提供LDAP-Authenticator。并且LDAP绑定仅与DN一起用作“用户名”。由于大多数用户不知道他们更容易记住电子邮件地址或登录用户名。因此,您需要找到用户登录数据的DN。因此,您需要在LDAP中进行搜索,并且必须绑定。因此,要绑定为您需要绑定的用户...要绕过该循环依赖关系,您需要首先绑定为具有对目录的读访问权并使用该会话查找用户的DN的人。找到后,使用该DN和用户提供的密码进行第二次绑定以验证用户凭据。
两天前我在zendcon上谈过这个问题。您可以在https://heiglandreas.github.io/slidedeck/Directory_Authentication_with_LDAP/20161019%20-%20zendcon/index_online.html
找到包含一些示例的幻灯片