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

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

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();

    }
}
42
задан Ben 26 January 2010 в 22:12
поделиться

3 ответа

Фу... 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(); 

    }
}
81
ответ дан 26 November 2019 в 23:39
поделиться

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

LDAP: //myserver/cn=mygroup ,cn=groups,n=mycontainer'dn=mydomain.com

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

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

3
ответ дан 26 November 2019 в 23:39
поделиться

Вы можете поставить сервер LDAP в аргументе пути к каталогам Patorententry, поэтому «LDAP: //» + LDAPSERVER + LDAPQUERY.

Используйте каталога (строковый путь, строка usid, строковый пароль), если вам нужно аутентифицировать

1
ответ дан 26 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: