Подтвердить что ты не робот

Добавление и удаление пользователей из групп Active Directory в .NET.

Я пишу следующие методы для добавления и удаления пользователей из активного каталога на С#.

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

Как лучше всего реализовать эти методы?

Вот код из CodeProject. Я не вижу, где AD-сервер указан в этих примерах? (он неявно предоставляется платформой .NET при использовании протокола 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();

    }
}
4b9b3361

Ответ 1

Тьфу. LDAP. Если вы используете .Net Framework 3.5 или выше, я настоятельно рекомендую использовать пространство имен System.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(); 

    }
}

Ответ 2

Сервер является частью значения переменной groupDn. Например:

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

Все это путь LDAP для группы. Первая часть (myServer) - это имя сервера.

Часть после имени сервера (например, CN =...) является DN (отличительное имя) группы.

Ответ 3

При удалении члена в public void RemoveUserFromGroup(string userDn, string groupDn)

dirEntry.Properties["member"].Remove(userDn) не работает для меня.

dirEntry.Properties["member"].RemoveAt(dn.IndexOf(dn)) работает.

Ответ 4

Вы можете поместить сервер LDAP в аргумент path в DirectoryEntry, поэтому "LDAP://" + ldapServer + ldapQuery.

Используйте DirectoryEntry (String path, String userId, String password), если вам нужно пройти аутентификацию