Search code examples
asp.net-mvc-4active-directorywindows-authenticationasp.net-4.5

ASP.NET Active Directory Search


I'm trying to create an intranet Website on ASP.NET MVC 4 using Windows Login. I have successfully done the windows login. The only thing I am stuck up with is searching the active directory with partial username. I tried searching the web and stackoverflow website but still couldn't find the answer.

   DirectoryEntry directory = new DirectoryEntry("LDAP://DC=NUAXIS");
   string filter = "(&(cn=jinal*))";
   string[] strCats = { "cn" };
   List<string> items = new List<string>();
   DirectorySearcher dirComp = new DirectorySearcher(directory, filter, strCats,     SearchScope.Subtree);
   SearchResultCollection results = dirComp.FindAll();

Solution

  • You can use a PrincipalSearcher and a "query-by-example" principal to do your searching:

    // create your domain context
    using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
    {
       // define a "query-by-example" principal - here, we search for a UserPrincipal 
       // and with the first name (GivenName) of "Jinal*" 
       UserPrincipal qbeUser = new UserPrincipal(ctx);
       qbeUser.GivenName = "Jinal*";
    
       // create your principal searcher passing in the QBE principal    
       using (PrincipalSearcher srch = new PrincipalSearcher(qbeUser))
       { 
          // find all matches
          foreach(var found in srch.FindAll())
          {
             // do whatever here - "found" is of type "Principal" - 
             // it could be user, group, computer.....          
          }
       }
    }
    

    If you haven't already - absolutely read the MSDN article Managing Directory Security Principals in the .NET Framework 3.5 which shows nicely how to make the best use of the new features in System.DirectoryServices.AccountManagement. Or see the MSDN documentation on the System.DirectoryServices.AccountManagement namespace.

    Of course, depending on your need, you might want to specify other properties on that "query-by-example" user principal you create:

    • DisplayName (typically: first name + space + last name)
    • SAM Account Name - your Windows/AD account name
    • User Principal Name - your "[email protected]" style name

    You can specify any of the properties on the UserPrincipal and use those as "query-by-example" for your PrincipalSearcher.