Добавление и удаление пользователей из групп Active Directory in.NET
Я пишу следующие методы для добавления и удаления пользователей из active directory в C#.
void AddUserToGroup(string userId, string groupName);
void RemoveUserFromGroup(string userId, string groupName);
Как лучше всего реализовать эти методы?
вот некоторый код из CodeProject. Я не вижу, где в этих примерах указан сервер AD? (неявно ли он предоставляется .NET framework при использовании протокола LDAP?). Стоит ли следовать этим примерам?
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();
}
}
4 ответов
тьфу. Протокол LDAP. Если вы используете .Net Framework 3.5 или выше, я настоятельно рекомендую использовать систему.DirectoryServices.Пространство имен AccountManagement. Это делает вещи так гораздо проще.
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();
}
}
сервер является частью groupDn значение переменной. Например:
LDAP: / / myServer / CN=MyGroup, CN=Groups, CN=MyContainer,DN=mydomain.com
все это путь LDAP для группы. Первая часть (myServer) - это имя сервера.
часть после имени сервера (например, CN=...)- DN (различающееся имя) группы.
при удалении члена в
public void RemoveUserFromGroup(string userDn, string groupDn)
dirEntry.Properties["member"].Remove(userDn)
не работает для меня.
dirEntry.Properties["member"].RemoveAt(dn.IndexOf(dn))
строительство.
вы можете поместить сервер LDAP в аргумент пути к DirectoryEntry, поэтому "LDAP: / /" + ldapServer + ldapQuery.
используйте DirectoryEntry (String path, String userId, String password), если вам нужно аутентифицировать