web-dev-qa-db-fra.com

Ajouter et supprimer des utilisateurs des groupes Active Directory dans .NET

J'écris les méthodes suivantes pour ajouter et supprimer des utilisateurs d'Active Directory en C #.

void AddUserToGroup(string userId, string groupName);
void RemoveUserFromGroup(string userId, string groupName);

Comment mettre en œuvre au mieux ces méthodes?

Voici du code de CodeProject. Je ne peux pas voir où le serveur AD est spécifié dans ces exemples cependant? (est-il implicitement fourni par le framework .NET lors de l'utilisation du protocole LDAP?). Ces exemples valent-ils la peine d'être suivis?

public void AddToGroup(string userDn, string groupDn)
{
    try
    {
        DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn);
        dirEntry.Properties["member"].Add(userDn);
        dirEntry.CommitChanges();
        dirEntry.Close();
    }
    catch (System.DirectoryServices.DirectoryServicesCOMException E)
    {
        //doSomething with E.Message.ToString();

    }
}


public void RemoveUserFromGroup(string userDn, string groupDn)
{
    try
    {
        DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn);
        dirEntry.Properties["member"].Remove(userDn);
        dirEntry.CommitChanges();
        dirEntry.Close();
    }
    catch (System.DirectoryServices.DirectoryServicesCOMException E)
    {
        //doSomething with E.Message.ToString();

    }
}
40
Ben

Pouah. LDAP. Si vous utilisez le .Net Framework 3.5 ou supérieur, je vous recommande fortement d'utiliser l'espace de noms System.DirectoryServices.AccountManagement. Cela rend les choses donc beaucoup plus faciles.

public void AddUserToGroup(string userId, string groupName) 
{ 
    try 
    { 
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY"))
        {
            GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
            group.Members.Add(pc, IdentityType.UserPrincipalName, userId);
            group.Save();
        }
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
        //doSomething with E.Message.ToString(); 

    } 
} 

public void RemoveUserFromGroup(string userId, string groupName)
{   
    try 
    { 
        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY"))
        {
            GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
            group.Members.Remove(pc, IdentityType.UserPrincipalName, userId);
            group.Save();
        }
    } 
    catch (System.DirectoryServices.DirectoryServicesCOMException E) 
    { 
        //doSomething with E.Message.ToString(); 

    }
}
78
Jacob Proffitt

Le serveur fait partie de la valeur de la variable groupDn. Par exemple:

LDAP: //myServer/CN=MyGroup,CN=Groups,CN=MyContainer,DN=mydomain.com

Le tout est le chemin LDAP pour le groupe. La première partie (myServer) est le nom du serveur.

La partie après le nom du serveur (par exemple CN = ...) est le DN (nom unique) du groupe.

3
Mike Marshall

Lors de la suppression d'un membre dans public void RemoveUserFromGroup(string userDn, string groupDn)

dirEntry.Properties["member"].Remove(userDn) ne fonctionne pas pour moi.

dirEntry.Properties["member"].RemoveAt(dn.IndexOf(dn)) fonctionne.

2
Andy

Vous pouvez placer le serveur LDAP dans l'argument de chemin d'accès à DirectoryEntry, donc "LDAP: //" + ldapServer + ldapQuery.

Utilisez DirectoryEntry (chemin d'accès String, String userId, String password) si vous devez vous authentifier

1
Mason