Autorisations utilisateur / groupe dans Active Directory

Où puis-je trouver un exemple qui fait ce qui suit?

  1. Extrait un utilisateur d’Active Directory.
  2. Obtient les groupes dont l’utilisateur est membre.
  3. Obtient une liste des permissions atsortingbuées à chaque groupe.

Cela semble être une tâche simple mais je ne trouve pas de solution.

L’objective général est d’atsortingbuer des permissions personnalisées et de les utiliser pour contrôler les droits au sein d’une application.

Si vous utilisez une version .NET 3.5 ou ultérieure, vous devez consulter l’espace de noms System.DirectoryServices.AccountManagement (S.DS.AM). Lisez tout a propos de ça ici:

  • Gestion des principes de sécurité de l’annuaire dans le .NET Framework 3.5
  • Documents MSDN sur System.DirectoryServices.AccountManagement

En gros, vous pouvez définir un contexte de domaine et trouver facilement des utilisateurs et / ou des groupes dans AD:

 // set up domain context PrincipalContext ctx = new PrincipalContext(ContextType.Domain); // find a user UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName"); if(user != null) { // do something here.... } // find the group in question GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere"); // if found.... if (group != null) { // iterate over members foreach (Principal p in group.GetMembers()) { Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName); // do whatever you need to do to those members } } 

Le nouveau S.DS.AM facilite vraiment la manipulation des utilisateurs et des groupes dans AD!

Le dernier point: les permissions. Celles-ci ne sont pas stockées dans Active Directory. Par conséquent, vous ne pouvez pas les récupérer à partir d’un code AD.

Les permissions sont stockées sur les différents éléments du système de fichiers, par exemple des fichiers et / ou des répertoires, ou d’autres objects (comme des clés de registre, etc.). Lorsque vous avez un groupe AD ou un compte utilisateur, vous pouvez lire sa propriété SID (identificateur de sécurité) – ce SID apparaîtra dans les ACL (listes de contrôle d’access) partout dans Windows – mais l’utilisateur ou le groupe ne dispose d’aucun mécanisme permissions qu’il peut avoir n’importe où sur la machine / le serveur.

Les permissions pour les fichiers et les répertoires peuvent par exemple être récupérées à l’aide de la méthode .GetAccessControl() sur les classes FileInfo et DirectoryInfo :

 FileInfo info = new FileInfo(@"D:\test.txt"); FileSecurity fs = info.GetAccessControl(); DirectoryInfo dir = new DirectoryInfo(@"D:\test\"); DirectorySecurity ds = dir.GetAccessControl(); 

Déchiffrer et donner un sens à ceux-ci est une toute autre histoire!