2010-04-08 6 views
0

J'ai un code qui fonctionne avec un ancien serveur Active Directory et maintenant je l'ai pointé vers un nouveau système Windows Server 2008 AD. Maintenant, les noms de groupes reviennent avec des SID et non des noms. Je ne connais pas assez le côté AD pour savoir s'il existe un moyen de faire fonctionner le nouveau serveur AD comme l'ancien serveur AD.Comment puis-je obtenir le nom de groupe à partir d'un groupe Active Directory avec .NET?

Mon code est basé sur le fournisseur de rôles Active Directory pour BlogEngine.NET sur Codeplex.

http://blogengineadrp.codeplex.com/sourcecontrol/network/Show?projectName=BlogEngineADRP&changeSetId=5843#138380

Je crois que ce la ligne que je vais devoir ajuster.

IdentityReferenceCollection irc = ExpandTokenGroups(user).Translate(typeof(NTAccount)); 

En ce moment ExpandTokenGroups est de retour la valeur SID alors que Traduisez a travaillé pour le changer dans le nom du groupe lisible par l'homme. Je voudrais savoir si je devrais passer dans un type différent de NTAccount à traduire.

Que puis-je faire pour obtenir le nom du groupe?

Répondre

0

Ceci est ma solution en C# qui n'est pas optimale mais qui fonctionne.

public override string[] GetRolesForUser(string username) 
    { 
     // list to store names of roles 
     List<String> roles = new List<string>(); 

     // get the user directory entry 
     DirectoryEntry user = getUser(username); 

     foreach (String prop in user.Properties["memberOf"]) 
     { 
      if (prop.IndexOf("CN=") == 0 && prop.IndexOf(",") != -1) 
      { 
       var groupName = prop.Substring("CN=".Length, prop.IndexOf(",") - "CN=".Length); 
       roles.Add(groupName); 
      } 
     } 

     return roles.ToArray(); 
    } 
0

Il y a une bonne explication d'une solution à: Translating Between Names and SIDs.

Fondamentalement, vous appelez l'appel de fonction LsaLookupSids.

Espérons que cela aide!

+0

Il semble que la solution est seulement pour C++ ce qui est regrettable. Je souhaite .NET avait un meilleur support pour Active Directory et LDAP car c'est important. – Brennan

Questions connexes