Active Directory LDAP - блокировка учетной записи пользователя - PullRequest
0 голосов
/ 20 мая 2010

Как лучше всего использовать System.DirectoryServices.AccountManagement для блокировки объекта пользователя Active Directory? Я могу определить, заблокирована ли учетная запись, используя ..

UserPrincipal principal = new UserPrincipal(context);
bool locked = principal.IsAccountLockedOut();

Как мне заблокировать аккаунт? Есть ли альтернатива тому, чтобы делать что-то подобное ...

UserPrincipal principal = new UserPrincipal(context);
DirectoryEntry entry = (DirectoryEntry)principal.GetUnderlyingObject();

int val = (int)entry.Properties["userAccountControl"].Value;

entry.Properties["userAccountControl"].Value = val | 0x0010;
entry.CommitChanges();

Ответы [ 5 ]

3 голосов
/ 23 июня 2010

Атрибут блокировки доступен только для чтения, и вот почему:

Определение этого атрибута будет выглядеть примерно так: «автоматически блокировать учетную запись пользователя, когда неверный пароль предоставляется несколько раз» (сколько раз? Я полагаю, это установлено в объекте групповой политики)

Предоставление разработчикам способа изменить этот атрибут будет противоречить приведенному выше определению ... поэтому вам не следует устанавливать это значение, и я думаю, что механизм безопасности AD не позволит вам сделать это.

Однако вы можете включить / отключить пользователя, который, я думаю, ближе к тому, что вы хотите.

Надеюсь, это поможет.

1 голос
/ 28 октября 2011

Этот код будет работать для блокировки пользователя в AD


        /// 
        /// Locks a user account
        /// 
        /// The name of the user whose account you want to unlock
        /// 
        /// This actually trys to log the user in with a wrong password. 
        /// This in turn will lock the user out
        /// 
        public void LockAccount(string userName)
        {
            DirectoryEntry user = GetUser(userName);
            string path = user.Path;
            string badPassword = "SomeBadPassword";
            int maxLoginAttempts = 10;

            for (int i = 0; i &lt maxLoginAttempts; i++)
            {
                try
                {
                    new DirectoryEntry(path, userName, badPassword).RefreshCache();
                }
                catch (Exception e)
                {

                }
            }
            user.Close();
        }

0 голосов
/ 02 мая 2013

используя свойство userflag, мы можем получить статус заблокированного пользователя, вот мой ответ

entryPC является объектом для DirectoryEntry, здесь мы передаем путь входа в активный каталог

 public bool IsLocked(DirectoryEntry entryPC)
    {
        if (entryPC.NativeGuid == null)
        {
            return false;
        }

        int flags = (int)entryPC.Properties["UserFlags"].Value;
        bool check = Convert.ToBoolean(flags & 0x0010);
        if (Convert.ToBoolean(flags & 0x0010))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
0 голосов
/ 20 мая 2012
0 голосов
/ 23 июня 2010

Статья CodeProject's Everything AD содержит пример кода для разблокировки учетной записи . Я не уверен, что это свойство даст вам то, что вы ищете.

public void Unlock(string userDn)
{
    try
    {
        DirectoryEntry uEntry = new DirectoryEntry(userDn);
        uEntry.Properties["LockOutTime"].Value = 0; //unlock account

        uEntry.CommitChanges(); //may not be needed but adding it anyways

        uEntry.Close();
    }
    catch (System.DirectoryServices.DirectoryServicesCOMException E)
    {
        //DoSomethingWith --> E.Message.ToString();

    }
}
...