2013-06-24 127 views
0

我需要驗證如果LDAP用戶帳戶被鎖定 我使用下面的代碼檢查用戶是否被鎖定在LDAP中?

const int ADS_UF_LOCKOUT = 0x00000010; 
DirectoryEntry entry = new DirectoryEntry (_path, domainAndUsername, pwd); 
if (((int)entry.Properties["useraccountcontrol"].Value & ADS_UF_LOCKOUT) == 1) 
{ 
    return true; 
} 

但是如果用戶帳戶被鎖定,我收到「登錄失敗:錯誤的用戶名/密碼」

請幫忙。

回答

0

如果您想確定用戶帳戶是否被鎖定,則無法使用您檢查的用戶帳戶信息來確定此事實 - 因爲用戶帳戶被鎖定,您將被拒絕訪問。

您不會被告知無法登錄的原因是由於該帳戶被鎖定,這將被視爲過度的信息披露。

如果您想要確定未被允許登錄的原因是是由於帳戶被鎖定,您需要一個已經登錄的帳戶,該帳戶可以檢查帳戶鎖定狀態,而不是嘗試從失敗連接。

+0

雖然我還沒有驗證它,但它似乎可以得到有關失敗的其他信息:http://stackoverflow.com/a/16796531/19308 –

0

您也可以使用屬性鎖定時間:如果用戶未鎖定,則爲0。 (使用管理員憑證連接到AD)。

DirectoryEntry _de = new DirectoryEntry (_path, domainAdmininstratorName, pwd); // get user as directory entry object 
object largeInteger = _de.Properties["lockoutTime"].Value; // it's a large integer so we need to get it's value by a little bit complex way 
long highPart = 
      (Int32) 
       largeInteger.GetType() 
        .InvokeMember("HighPart", BindingFlags.GetProperty, null, largeInteger, null); 
long lowPart = 
      (Int32) 
       largeInteger.GetType() 
        .InvokeMember("LowPart", BindingFlags.GetProperty, null, largeInteger, null); 
long result = (long) ((uint) lowPart + (((long) highPart) << 32)); 
if (result == 0) 
{ 
    // account is not locked 
} 
else 
{ 
// account is locked 
} 
相關問題