L'ajout et la suppression d'utilisateurs à partir d'Active Directory groupes .NET
Je suis en train d'écrire les méthodes suivantes pour ajouter et supprimer des utilisateurs à partir d'active directory en C#.
void AddUserToGroup(string userId, string groupName);
void RemoveUserFromGroup(string userId, string groupName);
La meilleure façon de mettre en œuvre ces méthodes?
Voici un code de CodeProject. Je ne vois pas où le serveur de publicité est spécifié dans ces exemples, si? (est-il implicitement fourni par le .NET framework lors de l'utilisation du protocole LDAP?). Ces exemples à suivre?
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();
}
}
Vous devez vous connecter pour publier un commentaire.
Ugh. LDAP. Si vous êtes en utilisant le .Net Framework 3.5 ou au-dessus, je recommande fortement d'utiliser le Système.DirectoryServices.AccountManagement espace de noms. Qui rend les choses donc beaucoup plus facile.
DOMAIN\someUserId
en votre qualité d'utilisateur, vous devez le modifier pourIdentityType.SamAccountName
, au lieu deUserPrincipalName
. Ce dernier vous donnera une exception:No principal matching the specified parameters was found
. Mais notez, aussi, il vous donnera également une exception avecSamAccountName
, si l'utilisateur est déjà dans le groupe..Save()
fonctionnement, peu importe. Vous devez vérifier si leUserPrincipal
objet pour l'utilisateur.IsMemberOf(group)
, pour découvrir cette. Soumis une modification.userId
devrait être dansDOMAIN\username
formulaire à envoyer àUserPrincipal.FindByIdentity(pc, userId);
, cependant, qui aurait besoin d'SamAccountName
dans leIdentityType
.company
signifie que les deux méthode?Le serveur fait partie de la nom_unique_groupe valeur de la variable. Par exemple:
LDAP://myServer/CN=MyGroup,CN=Groupes,CN=MyContainer,DN=mydomain.com
L'ensemble de la chose, c'est le chemin LDAP pour le groupe. La première partie (monserveur) est le nom du serveur.
La partie après le nom du serveur (par exemple, CN=...) est le DN (distinguished name) du groupe.
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))
œuvres.dn
variable?Vous pouvez mettre le serveur LDAP à l'argument de chemin de DirectoryEntry, donc "LDAP://" + ldapServer + ldapQuery.
Utiliser le DirectoryEntry(String path, String l'identifiant, le mot de passe de Chaîne) si vous devez vous authentifier