8

Ich versuche, eine Intranet-Website auf ASP.NET MVC 4 mit Windows-Anmeldung zu erstellen. Ich habe die Windows-Anmeldung erfolgreich durchgeführt. Das Einzige, woran ich festhabe, ist das Durchsuchen des aktiven Verzeichnisses mit partiellem Benutzernamen. Ich habe versucht, die Web-und Stackoverflow-Website zu durchsuchen, konnte aber immer noch nicht die Antwort finden.ASP.NET Active Directory-Suche

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(); 
+0

Können Sie uns den Code, den Sie verwendet haben, um eine Suche auf einem Teilbenutzernamen zu tun? – rene

+0

@rene Ich habe den Code zum Beitrag hinzugefügt –

Antwort

13

können Sie einen PrincipalSearcher verwenden und eine "Abfrage-by-Example" principal Ihre Suche zu tun:

// 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.....   
     } 
    } 
} 

Wenn Sie nicht bereits haben - absolut im MSDN-Artikel Managing Directory Security Principals in the .NET Framework 3.5 lesen, die schön zeigt wie man die neuen Funktionen in System.DirectoryServices.AccountManagement optimal nutzt. Oder sehen Sie sich den Namespace an.

Natürlich, je nach Bedarf, können Sie andere Eigenschaften auf, dass „query-by-Beispiel“ Benutzerprinzipal angeben Sie erstellen:

  • DisplayName (typisch: Vorname + Raum + Nachname)
  • SAM Account Name - Ihr Windows/AD-Kontonamen
  • User Principal Name - Ihr "[email protected]" Artnamen

Sie spe können cify eine der Eigenschaften auf UserPrincipal und verwenden Sie diese als "Query-by-Beispiel" für Ihre PrincipalSearcher.

+0

Danke, das hat mir sehr geholfen. –

0

Ihr aktueller Code ist auf der richtigen Spur. Ich glaube, du hattest deine Wildcard rückwärts.

Bedenken Sie:

search.Filter = string.Format("(&(sn={0}*)(givenName={1}*)(objectSid=*))", lastName, firstName); 
Verwandte Themen