早上好,
我有一个提供LDAP身份验证的PHP脚本(下面的代码)但是我需要对多个上下文进行身份验证。
我不确定最好的解决方法,并想知道是否有人可能有任何指示/建议。
亲切的问候, 本
$username = $_POST["username"];
$password = $_POST["password"];
//$ipaddressreceived = $_POST["ipaddress"];
$ldapcontext = "ou=Staff, ou=Users,o=ABC";
$ldapconn = ldap_connect("IPADDRESS"); // must be a valid LDAP server!
$ldaprdn = "cn=$username,$ldapcontext";
function authenticate($username, $password) {
global $ldapconn;
global $username;
global $password;
global $ldaprdn;
// Prevent null binding
if ($username === NULL || $password === NULL) { return false; }
if (empty($username) || empty($password)) { return false; }
// Bind as the user
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $password);;
if ($ldapbind) { $ret = true;
} else {
$ret = false;
}
return $ret;
}
$authUser=authenticate($username, $password);
if ($authUser == true) {
session_start();
$_SESSION["username"]=$username;
$ldapfields = array("cn", "givenname", "sn", "mail");
$ldapsearch=ldap_search($ldapconn, "$ldapcontext", "cn=$username", "$ldapfields");
$info = ldap_get_entries($ldapconn, $ldapsearch);
$givenname = $info["sn"][0];
$_SESSION["givenname"]=$givenname;
$login_message = "LOGIN SUCCESSFUL";
header("Location: index.php");
exit;
} else
{
$login_message = "Login Failed";
}
答案 0 :(得分:0)
答案 1 :(得分:0)
据我了解您的问题,您希望能够从上下文jondoe
以及来自上下文ou=Staff,ou=Users,o=ABC
的{{1}}验证janedoe
。
在我看来,只要用户名是整个LDAP的唯一acros,就有两种可能的方法。
首先,您可以将所有可能的上下文添加到数组ou=Externals,ou=Others,o=ABC
,然后循环遍历这些上下文以查找匹配的用户。
其次,您使用两步法,在整个LDAP中按用户名搜索用户,然后使用返回的$contexts
根据LDAP对用户进行身份验证。
您还可以通过提供多个搜索库来组合这两种方法,并在搜索用户dn
的步骤中对这些方法进行迭代。一旦找到用户,您就可以使用dn
和密码对其进行身份验证。
您可以在https://github.com/heiglandreas/authLdap/blob/master/ldap.php#L222找到示例实现。