我对其他人如何编码很感兴趣,因为我要么没有正确理解它,要么我遗漏了一些东西,或者我什至做得对!
首先,这不是 LDAP 它的 OpenDS 的 Active Directory 实例,除了一些语法差异之外,它应该没什么大不了的。
所以假设我的树结构设置是这样的:
-dc=somedomain,dc=com
-uid=rootuser
-ou=Group1
-uid=username1
-uid=username2
-ou=Group2
-uid=username3
-uid=username4
为了以“rootuser”身份进行身份验证,我需要在创建 System.DirectoryServices.DirectoryEntry 对象时传递完全限定的用户名,在这种情况下:
uid=rootuser,dc=somedomain,dc=com
但是对于树中的任何其他用户,我必须提前知道要附加到用户名的 LDAP 路径以让他们通过身份验证。因此,例如这将失败:
uid=username1,dc=somedomain,dc=com
但这会起作用:
uid=username1,dc=somedomain,dc=com,ou=Group1
所以我的问题是,当您在登录时不知道用户属于哪个特定组来构建该路径时,您如何处理这个问题?我能想到的唯一方法是将初始调用作为“rootuser”进行,这样我就可以访问整个树,然后使用 System.DirectoryServices.DirectorySearcher 扫描它以查找该特定用户(即 username1)
using (DirectorySearcher searcher = GetDirectorySearcher()) {
searcher.Filter = "(&(objectClass=person)(uid=" + userName+ "))";
SearchResult result = searcher.FindOne();
return result.GetDirectoryEntry().Path;
}
那时我有我想要登录的用户的路径,我可以继续进行实际的身份验证。我在这里离基地很远吗?或者这通常是如何完成的?
谢谢!