2009-08-24 5 views
4

Fondamentalement, ce que j'essaie de faire est, j'ai une application Web ASP.Net qui utilise l'authentification par formulaires avec un code personnalisé pour le lier à ActiveDirectory (très similaire à la façon dont fonctionne this). Cependant, chaque fois que j'interroge le contrôleur de domaine pour les groupes d'utilisateurs, il retourne uniquement les groupes auxquels ils appartiennent explicitement et non les sous-groupes (id est, il y a un groupe de sécurité spécifique auquel appartient l'utilisateur, par exemple est un membre du groupe que je veux, disons groupe B, l'utilisateur est explicitement dans le groupe A, mais seulement implicitement dans le groupe B parce que le groupe A est un membre du groupe B). J'ai lu la requête tokenGroups pourrait m'aider ici mais actuellement je n'ai pas un moyen d'analyser ces données. Cependant, ce qui serait le plus préférable serait de pouvoir passer certains groupes via une requête LDAP et que le contrôleur de domaine me donne juste un booléen (vrai/faux) si cet utilisateur est dans ce groupe ou pas.C# ActiveDirectory Requête de groupe LDAP

Des suggestions?

Répondre

4

Oui, le "habituel" user.Properties["memberOf"] renvoie uniquement les appartenances directes.

Si vous utilisez .NET 3.5 cependant, vous pouvez utiliser les méthodes « principales » basées sur les plus modernes:

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); 
      } 
     } 
    } 
} 

Cette méthode (ajouter une référence à l'assemblée « System.DirectoryServices.AccountManagement » à votre projet) devrait fonctionner et fournir le groupe principal de l'utilisateur et ses appartenances aux groupes imbriqués. Si vous êtes sur .NET 2.0/3.0 et que vous ne pouvez pas vous déplacer, utiliser l'approche en lisant l'attribut "tokenGroups" est la meilleure approche - voir les détails sur comment faire tout cela dans l'excellent Ryan Dunn article de blog, Enumerating Token Groups (tokenGroups) in .NET.

Marc

+0

La méthode tokenGroups a fonctionné parfaitement. Malheureusement, nous ne sommes pas sur 3.5 donc je ne peux pas essayer la nouvelle méthode mais le lien que vous avez donné pour la configuration de tokenGroups a bien fonctionné. Merci. –

+0

Content de pouvoir aider, Tyler! –

Questions connexes