2010-05-19 3 views
0

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

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

ответ

3

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

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

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

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

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

0

CodeProject's Everything AD article has some sample code on unlocking an account. Я не уверен, что это свойство, которое даст вам то, что вы ищете.

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

    } 
} 
1

Этот код будет работать, чтобы заблокировать пользователя в 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 < maxLoginAttempts; i++) 
      { 
       try 
       { 
        new DirectoryEntry(path, userName, badPassword).RefreshCache(); 
       } 
       catch (Exception e) 
       { 

       } 
      } 
      user.Close(); 
     } 
 
0

используя 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; 
     } 
    }