2013-08-21 4 views
2

J'ai du code qui vérifie Active Directory pour tous les groupes dont un utilisateur est membre, cela fonctionne bien localement dans mon environnement de développement mais ne fonctionne pas lorsque je lance sur le système de test.Les groupes Active Directory ne sont pas retournés

Un camarade de travail a suggéré que le compte sous lequel le pool d'applications s'exécute sous IIS ne peut pas interroger Active Directory. Serait-ce le cas? Qu'est-ce qui pourrait empêcher le retour de groupes? Lorsque j'exécute mon code localement, je suis capable de récupérer la liste, mais Test revient vide. Il n'y a pas d'erreur du tout.

code exemple, où je change "LIVE" à "TEST" que nous avons un réseau multi-domaines, mais ni travaux:

UserPrincipal user = UserPrincipal.Current; 
if (user != null) 
{ 
    PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, "TEST"); 
    List<Principal> groupResults = user.GetGroups(principalContext).ToList(); 
} 
+0

cela pourrait être une question stupide, mais êtes-vous complètement sûr qu'il ya en effet de groupe dans l'AD dans l'environnement de test? –

+0

Certainement pas une question idiote! Ma réponse honnête est que je ne sais pas, cependant, comme j'ai changé le domaine (en supposant que cela fonctionne correctement) à Live et il n'a toujours rien retourné, et je sais que le système Live AD a des groupes répertoriés sous mon nom ... mais si cela finit par vérifier le compte d'IIS, ce serait une autre affaire. – MattR

+0

S'agit-il d'une application Web exécutée dans le contexte de l'utilisateur NetworkService dans IIS? Connaissez-vous également le nom de l'utilisateur spécifique pour lequel vous souhaitez rechercher des groupes? – Scampbell

Répondre

2

Il semble que le problème soit lié à l'utilisateur que vous utilisez pour obtenir des groupes. UserPrincipal.Current obtient le compte d'utilisateur du thread dans lequel il s'exécute. Dans une application IIS, ce compte est le compte spécifié dans l'identité du pool d'applications IIS de l'application. Si vous voulez trouver des groupes Active Directory pour un compte d'utilisateur spécifique pour obtenir des groupes pour, vous pouvez utiliser ce code (.Net 4):

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "TEST");) 
{ 
    UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "A_User_Name"); 
    foreach (var group in user.GetGroups()) 
    { 
     Console.WriteLine(group.Name); 
    } 
} 

Si vous voulez comparer les résultats de ce pour les utilisateurs et les groupes un domaine spécifique, vous pouvez utiliser cet outil: "Active Directory Users and Computers"

+0

Ça en fait partie. Le problème que je peux voir après avoir défini spécifiquement le nom d'utilisateur est de sélectionner un domaine différent, quand j'ai TEST, il ne semble pas avoir de résultats différents après avoir ajouté/supprimé des groupes de mon nom. – MattR

+1

Avez-vous essayé d'utiliser cet utilitaire Utilisateurs et ordinateurs Active Directory pour comparer les groupes renvoyés pour le nom d'utilisateur dans chaque domaine? Vous pouvez le pointer vers chaque domaine séparément et voir les groupes dont l'utilisateur que vous utilisez fait partie. – Scampbell

1

cela devrait fonctionner si elle est ASP.NET:

public static List<string> GetGroups(string userName) 
    { 
     RoleProvider roleProvider = new WindowsTokenRoleProvider(); 
     return roleProvider.GetRolesForUser(userName).ToList(); 
    } 

super simple

1

Je ne suis pas sûr à 100% mais je pense qu'il est beaucoup plus simple que votre code:

UserPrincipal user = UserPrincipal.Current; 

if (user != null) 
{ 
    List<Principal> groupResults = user.GetGroups().ToList(); 
} 
Questions connexes