大家好,
我知道我的问题必须有一个似曾相识的一面,但我没有通过stackoverflow找到任何解决方案。 所以我一直在尝试创建一个允许连接到ldap的函数,然后检查我的用户的id和pwd,然后检查他是哪个组。 当我在一个“片段”中完成此功能时,它起作用了。 但是我想用三种不同的功能做到这一点,所以我可以逐一处理它。 所以现在我有连接到ldap的函数:
function ldapConnection() {
$ldapConnection = ldap_connect(LDAP_SERVER);
ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConnection, LDAP_OPT_REFERRALS, 0);
return $ldapConnection;
}
它返回标识符LDAP链接,因此连接正常。
然后我有检查登录和pwd的功能:
public function checkLoginPwd($login, $pwd) {
$ldapConnexion = $this->ldapConnection();
if ($bind = ldap_bind($ldapConnexion, $login, $pwd)) {
return true;
//ldap_close($ldapConnexion);
} else {
return false;
}
}
然后功能我遇到了麻烦。
public function checkUserRights($login, $pwd, $ldapConnection) {
//Récupération login
$loginAccount = "(sAMAccountName=$login)";
//Suppression de "myGroup\"
$filter = str_replace("myGroup\\", "", $loginAccount);
$attr = array("memberof");
//Recherche
$result = ldap_search($ldapConnection, LDAP_BASE_DN, $filter, $attr);
$entries = ldap_get_entries(ldap_connect(LDAP_SERVER), $result);
foreach ($entries[0]['memberof'] as $grps) {
if (strpos($grps, "VPN")) {
$access = 2;
break;
}
if (strpos($grps, "Users"))
$access = 0;
}
if ($access != 0) {
$_SESSION['user'] = $login;
$_SESSION['access'] = $access;
return true;
} else {
return false;
}
如果我尝试以这种方式连接,我会收到此消息错误: ldap_search():搜索:操作错误 如果我一次这样做就行了。
如果有人能帮助我,那就太棒了......
编辑:
所以你知道,如果我执行$ filter的var转储,我就有:string'(sAMAccountName = myLogin)'。 对于$ ldapConnection它的资源(13,ldap链接),对于LDAP_BASE_DN,它的字符串'DC = myGroup,DC = fr',$ attr是数组(size = 1) 0 => string'memberof'(length = 8)。
答案 0 :(得分:1)
我希望它会对你有所帮助 也许您使用的过滤器存在问题我们使用ldap来吸引用户使用Windows Server 2008
function connect_ldap_server(){
global $ad_server,$ad_server_port;
putenv('LDAPTLS_REQCERT=never');
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
$ds=ldap_connect($ad_server,$ad_server_port); // must be a validLDAPserver!
}
$basedn=dc=testlab, dc=local
$sr=ldap_search($ds, $basedn,"(&(objectcategory=person) (objectclass=user))");
答案 1 :(得分:1)
所以我经过几个小时的搜索后找到了解决方案,并在此发布,以防它可能对某人有用: 我刚刚将这两行添加到checkUsersRights函数中:
$ldapConn = ldap_connect(LDAP_SERVER);
ldap_bind($ldapConn, $login, $pwd);
确实在我调用我的函数创建一个新连接之前,我需要在我的函数中创建它并使用ldap_bind正确连接。 希望有一天能帮助别人...