2009-08-24 6 views
4

Im Grunde, was ich versuche zu tun ist, habe ich eine ASP.Net-Webanwendung, die Forms Authentication mit einigen benutzerdefinierten Code verwendet, um es mit ActiveDirectory zu verknüpfen (sehr ähnlich, wie this funktioniert).C# ActiveDirectory LDAP-Gruppe Abfragen

Wenn ich jedoch den Domänencontroller für die Benutzergruppen abfrage gibt es nur die Gruppen, die sie explizit sind und keine Untergruppen (ID est, gibt es eine bestimmte Sicherheitsgruppe, die der Benutzer gehört, sagen Gruppe A, dass ist ein Mitglied der Gruppe, die ich will, sagen Gruppe B, der Benutzer ist explizit in Gruppe A, aber nur implizit in Gruppe B, weil Gruppe A ein Mitglied der Gruppe B) ist.

Ich habe gelesen, die TokenGroups Querying könnte mir hier helfen, aber zur Zeit habe ich keine Möglichkeit, diese Daten zu analysieren.

Am besten ist es jedoch, wenn ich bestimmte Gruppen über eine LDAP-Abfrage übergeben kann und der Domänencontroller nur einen booleschen Wert (true/false) angibt, wenn dieser Benutzer in dieser Gruppe ist oder nicht.

Irgendwelche Vorschläge?

Antwort

4

Ja, das "normale" user.Properties["memberOf"] gibt nur direkte Mitgliedschaften zurück.

Wenn Sie 3.5 jedoch mit sind .NET können Sie die moderneren „principal-basierte“ Methoden verwenden:

using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) 
{ 
    using(Principal p = Principal.FindByIdentity(ctx, "yourUserName")) 
    { 
     var groups = p.GetGroups(); 

     using (groups) 
     { 
      foreach (Principal group in groups) 
      { 
       Console.WriteLine(group.SamAccountName + "-" + group.DisplayName); 
      } 
     } 
    } 
} 

Diese Methode (fügen Sie einen Verweis auf die „System.DirectoryServices.AccountManagement“ assembly zu Ihrem Projekt) sollte funktionieren und die primäre Gruppe des Benutzers und seine verschachtelten Gruppenmitgliedschaften ebenfalls liefern.

Wenn Sie auf .NET 2.0/3.0 sind und nicht nach oben gehen können, ist die Verwendung des Ansatzes durch Lesen des "tokenGroups" -Attributs die beste Vorgehensweise - sehen Sie die Details dazu in Ryan Dunns exzellentem Vorgehen Blogpost, Enumerating Token Groups (tokenGroups) in .NET.

Marc

+0

Die TokenGroups-Methode funktionierte einwandfrei. Leider sind wir nicht auf 3.5, daher kann ich die neue Methode nicht ausprobieren, aber der Link, den Sie für die Konfiguration von tokenGroups angegeben haben, hat super funktioniert. Vielen Dank. –

+0

Ich bin froh, dass ich helfen konnte, Tyler! –

Verwandte Themen