我已经实现了System.DirectoryServices.AccountManagement,用于身份验证进入我的Web应用程序,通过给定用户名的身份查找用户(UserPrincipal)。但是,在几种情况下,我只需要给我一个employeeID就可以获取AD帐户。在AccountManagement中,给定一个employeeID是否有一种很好的方法来获取UserPrincipal(甚至只是sAMAccountName)?

我目前正在通过用户名来抓取用户:

PrincipalContext adAuth = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);

//get user
UserPrincipal usr = UserPrincipal.FindByIdentity(adAuth, username);

我一直在搜索,似乎无法找到答案来确认是否可以完成此操作。如果我无法使用AccountManagement进行操作,那么给定employeeID的sAMAccountName最好的方法是什么?

最佳答案

您不需要走出System.DirectoryServices.AccountManagement命名空间。

UserPrincipal searchTemplate = new UserPrincipal(adAuth);
searchTemplate.EmployeeID = "employeeID";
PrincipalSearcher ps = new PrincipalSearcher(searchTemplate);

UserPrincipal user = (UserPrincipal)ps.FindOne();

在此示例中,如果未找到用户,则用户对象为null。如果要查找UserPrinicipal对象的集合,可以在PrincipalSearcher(ps)对象上使用FindAll方法。

还要注意,FindOne方法返回一个Principal对象,但是我们知道它实际上是一个UserPrincipal,并且应该这样处理(广播),因为UserPrincipal是搜索过滤器的一部分。

关于c# - 通过employeeID获取UserPrincipal,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23916328/

10-13 04:39