Php 筛选LDAP用户的最佳方法

Php 筛选LDAP用户的最佳方法,php,active-directory,ldap,Php,Active Directory,Ldap,我正在使用LDAP-Active Directory对我的一个项目的用户进行身份验证 我目前有两个登录页面-一个是为学生设计的,另一个是为员工设计的 我已经成功地编写了一个身份验证脚本来绑定到LDAP服务器——这适用于存储在LDAP服务器上的所有用户 现在我希望能够从教职员工中筛选出学生,只允许教职员工通过“教职员工登录页面”登录 DN的外观如下所示: cn=USERNAME,ou=DEPT,ou=MAS,ou=LAN,o=UNI <-- STAFF cn=USERNAME,ou=DEP

我正在使用LDAP-Active Directory对我的一个项目的用户进行身份验证

我目前有两个登录页面-一个是为学生设计的,另一个是为员工设计的

我已经成功地编写了一个身份验证脚本来绑定到LDAP服务器——这适用于存储在LDAP服务器上的所有用户

现在我希望能够从教职员工中筛选出学生,只允许教职员工通过“教职员工登录页面”登录

DN的外观如下所示:

cn=USERNAME,ou=DEPT,ou=MAS,ou=LAN,o=UNI  <-- STAFF
cn=USERNAME,ou=DEPT,ou=STUDENT,ou=LAN,o=UNI <-- STUDENT

cn=USERNAME,ou=DEPT,ou=MAS,ou=LAN,o=UNI为了防止学生通过新的员工身份验证脚本登录,您只需更改LDAP搜索的基础即可。尽管在整个目录中搜索UPN,您还是从
ou=MAS、ou=LAN、o=UNI
中搜索UPN

使用LDIFDE.EXE,它将提供:

ldifde-f c:\temp\user.ldf-d“ou=MAS,ou=LAN,o=UNI”-r“(userPrincipalName=login)”

因此,如果用户是学生,搜索不会返回任何内容


在绝对LDAP上,它存在一个名为ExtensibleMatch的筛选器语法,允许您这样做,但它在AD中确实有效。

请原谅,我对LDIFDE.exe不太熟悉,事实上我从未使用过它。您的意思是,如果更改我搜索的基数,那么我可以搜索“ou=LAN,o=UNI”,而不是搜索“ou=MAS,ou=LAN,o=UNI”?目前,您如何获取身份验证人的DN?我假设在一个表单中,他给出了他的登录名(userPrincipalName),您在目录中进行搜索以找到该对象。您可以根据登录页面从其他位置开始搜索。目前,我正在使用提供的用户名对LDAP服务器执行注释性绑定,然后返回如上所示的可分辨名称。然后我尝试用返回的DN和密码再次绑定。正如我所说的,我用这个作为起点:$dn=“ou=LAN,o=UNI”;我可以用ou=MAS,ou=LAN,o=UNI来搜索我的目录吗?有些事情我不明白。如果绑定是匿名的,那么它不是与用户绑定的!所以你执行了一个匿名绑定,然后你通过是否为UPN搜索用户?也许你可以展示你的代码,但我想你可以用ou=MAS,ou=LAN,o=UNI来搜索你的目录?