所以我驗證用戶名,密碼和組成員在Active Directory中,像這樣:Active Directory的驗證是緩慢PHP
function validate($username, $password, $groupname = null) {
if ($username && $password) {
$link = ldap_connect($domain);
if ($link) {
ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, 3);
$bind = ldap_bind($link, $username, $password);
if ($bind) {
if ($groupname) {
$filter = "(samAccountName=".$username.")";
$attrs = array("memberOf");
$res = ldap_search($link, $baseDN, $filter, $attrs);
$entries = ldap_get_entries($link, $res);
$isMember = false;
if ($entries && $entries[0] && $entries[0]['memberof']) {
$arr = $entries[0]['memberof'];
foreach ($arr as $key => $value) {
if ($key != 'count') {
$isMember = $isMember || preg_match("|".preg_quote($groupname)."|", $value);
}
}
}
return $isMember;
} else {
return true;
}
} else {
return false;
}
} else {
error_log("Could not connect to Active Directory");
return false;
}
} else {
error_log("Username or password missing");
return false;
}
}
這正常工作,但痛苦緩慢,需要儘可能2〜3分鐘來驗證用戶是否屬於一個組。如果我省略組成員身份檢查,它幾乎會立即運行。我如何加速(沒有緩存)?
EDIT因爲它不是從提問清楚,瓶頸是ldap_search
函數,它接受〜127秒,該程序的其餘部分在不到一秒鐘的運行。還應該補充一點,我們只有大約20個AD用戶和10個組。
當你傳遞一個空'''$ attrs'''來'''ldap_search'''是否會持續多長時間? – heiglandreas
結果完全相同。 –
什麼是您的基地DN?我是對的,LDAP有一個相當大的分佈式目錄樹? – heiglandreas