Bonjour
Je souhaite tester l'appartenance à un groupe de l'active directory pour un utilisateur donné.
Je travaille sur un projet silverlight, je passe donc par un service WCF, j'ai ajouté à mon projet web la reference
using.System.DirectoryServices;
voilà ma fonction :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| public bool IsMemberOf(string distinguishedGroupName,string distinguishedUserName)
{
DirectoryEntry Ldap = new DirectoryEntry("LDAP://toto.fr/DC=ad,DC=toto,DC=fr", "identifiant", "motdepasse");
DirectorySearcher myDirectorySearcher;
DirectoryEntry myDirEntry = null;
bool isMember = false;
SearchResultCollection myResults;
try
{
//On crée un nouvel objet DirectorySearcher.
myDirectorySearcher = new DirectorySearcher();
//On applique les paramètres de recherche.
myDirectorySearcher.SearchRoot = myDirEntry;
myDirectorySearcher.Filter = "(&(objectClass=group)(distinguishedName="+distinguishedGroupName+"))";
myDirectorySearcher.SearchScope = SearchScope.Subtree;
myDirectorySearcher.SizeLimit = 1;
myDirectorySearcher.PropertiesToLoad.AddRange(new string[]{"cn"});
//On récupère le résultat
SearchResult myResult = myDirectorySearcher.FindOne();
if(myResult!=null)
{
myDirEntry = myResult.GetDirectoryEntry();
//Vérification si l'utilisateur userName est directement membre du groupe distinguishedGroupName
if ((bool)myDirEntry.Invoke("IsMember", new Object[] { Ldap + distinguishedUserName }))
{
isMember=true;
}
else
{
//On crée un nouvel objet DirectorySearcher.
myDirectorySearcher = new DirectorySearcher();
//On applique les paramètres de recherche.
myDirectorySearcher.SearchRoot = myDirEntry;
myDirectorySearcher.Filter = "(&(objectClass=group)(memberOf="+distinguishedGroupName+"))";
myDirectorySearcher.SearchScope = SearchScope.Subtree;
//on indique les propriétés à charger
myDirectorySearcher.PropertiesToLoad.AddRange(new string[]{"distinguishedName"});
//On récupère les résultats.
myResults = myDirectorySearcher.FindAll();
foreach(SearchResult result in myResults)
{
isMember=isMember || IsMemberOf(result.Properties["distinguishedName"][0].ToString(),distinguishedUserName);
}
}
}
else
{
throw(new Exception("Le groupe " + distinguishedGroupName + " est introuvable."));
}
}
catch(Exception ex)
{
throw(new Exception("Echec de vérification de l'appartenance à un groupe",ex));
}
return isMember;
} |
Lorsque je teste ma fonction, il m'est indiqué que le groupe est introuvable. Or ce dernier existe bel et bien, est ce que quelqu'un aurait une explication?
Merci d'avance
Cordiallement
Maxwel
Partager