我正在使用LDAP登录系统。目前,我可以使用AD帐户登录系统。问题是,我的系统有两种类型的用户。 (管理员可以读写,而另一个是普通用户,只能读取)。如何在这两个用户之间进行过滤,这样当管理员登录时,他们将被带到他们的HomeScreen.php,而普通用户将被带到HomeScreen2.php。
这是我到目前为止所做的LDAP编码(不包括登录表单):
set_time_limit(30);
error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set('display_errors',1);
///config
$ldapserver = "server.name";
$ldapport = 389;
$base_dn = "DC=xyz,DC=local";
$ldapuser = isset($_POST['username']) ? $_POST['username'] : '';
$ldappass = isset($_POST['password']) ? $_POST['password'] : '';
$ldaptree = "CN=ITInfra,OU=Groups,OU=MYABC,DC=xyz,DC=local";
$domain = '@abcd.local';
// connect
$ldapconn = ldap_connect($ldapserver,$ldapport) or die ("Could not connect to LDAP
server.");
// Set some ldap options for talking to
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
if ($ldapconn) {
// binding to ldap server
//$ldapbind = @ldap_bind($ldapconn, $ldapuser.$domain, $ldappass) or die ("<b>
<center><font color='red'>WARNING! : ".ldap_error($ldapconn));
$ldapbind = @ldap_bind($ldapconn, $ldapuser.$domain, $ldappass) or
die("<b><center><font color='red'>WARNING!<br> The username or password you entered is
incorrect");
// verify binding
if ($ldapbind) {
$result = @ldap_search($ldapconn,$ldaptree, "(ou=*)") or die ("<b>
<center><font color='red'>Please enter username & password");
echo "<b><center><font color='blue'> Congratulations! $ldapuser is
authenticated.\n";
header('Location: HomeScreen.php');
} else {
echo "LDAP bind failed...\n";
}
}
// all done? clean up
ldap_close($ldapconn);
答案 0 :(得分:0)
当客户端成功BIND时,服务器已向客户端指示用户名及其相关密码是正确的 - 服务器能够验证密码是否与BIND请求中提供的密码相匹配。这就是发生的一切。如果BIND不成功,则用户名和/或密码不正确。此时LDAP对象之间没有区别。
所需要的是客户端确定username
类型的方式。至少有两种合理的方法可以做到这一点:
组方法比属性方法更灵活,因为新的“普通”用户或新的“管理员”用户可以简单地添加到适当的组中。
例如,管理员组:
cn=admin users,ou=groups,o=example.com
objectClass: groupOfNames
member: cn=admin user 1,ou=groups,o=example.com
member: cn=admin user 2,ou=groups,o=example.com
或普通用户组:
cn=normal users,ou=people,o=example.com
objectClass: groupOfNames
member: cn=normal user 1,ou=groups,o=example.com
member: cn=normal user 2,ou=groups,o=example.com
member: cn=normal user 3,ou=groups,o=example.com
客户端可以通过使用适当的搜索请求参数进行搜索来确定username
到哪个组。如果username
属于管理员组,则显示homescreen.php
其他homescreen2.php
。
这是两种可能性。可能还有其他方法,具体取决于您的设置和服务器类型(尽管必须永远不要写LDAP客户端,就好像他们知道他们连接的服务器类型一样)。