2012-09-27 8 views
4

目前我們(我和我的公司)有一個asp.net mvc4頁面。我們希望利用通過AD進行身份驗證的登錄頁面。一個要求是不成功的嘗試,我們給用戶一些信息。活動目錄身份驗證與狀態/錯誤代碼結果

我們希望有會是這樣的信息:

  1. 無效的用戶/密碼
  2. 帳戶被鎖定
  3. 密碼過期

這是不熟悉的領域,所以我」我不確定什麼.NET庫可用。到目前爲止,我只是遇到了System.DirectoryServices,但它似乎並不會超出布爾的結果。

這可能嗎?任何參考,建議或例子將不勝感激!

+0

你會如何檢查無效的用戶/密碼?將訪問該網站的用戶不在該域中?...如果我錯了,請糾正我。 – RL89

+0

此解決方案將託管在雲中,我們將控制AD,我們將知道用戶正在驗證哪個域(例如「local.domain」)。在我的演示項目中,我們可以肯定地告訴用戶是否無法通過PrincipalContext.ValidateCredentials()調用進行驗證。這個解決方案的問題是,除了True/False結果之外,我們沒有任何信息,這顯然不會告訴您爲什麼它不成功。我可能會選擇這個,我只是在尋找是否有辦法進行這種認證和獲得更詳細結果的建議。 –

回答

4

您可以先使用PrincipalContext.ValidateCredentials驗證您的憑證。如果返回false,則使用靜態UserPrincipal.FindByIdentity找到您的用戶,如果找到,則查看是否使用IsAccountLockedOut()鎖定帳戶。

您可能需要自己擴展UserPrincipal以查看密碼是否已過期,但我沒有看到直接的屬性/方法。您可以擴展它以直接訪問userAccountControl屬性,並檢查是否設置了0x800000位,即PasswordExpired。這裏是more information on the userAccountControl values

+0

謝謝約書亞!這聽起來很合理,而且看起來是我會選擇的路徑。 –

0

假設你有這樣的代碼

try 
{ 
    SearchResult result = searcher.FindOne(); 
} 
catch(Exception e) 
{ 
// now what? 
} 

現在異常,您可以處理LDAP異常類型,這是所有LDAP錯誤的的名單。

http://msdn.microsoft.com/en-us/library/aa746530(v=vs.85).aspx

您可以識別的ADSI錯誤值你得到的錯誤類型的基礎上。

但根據我,你應該給用戶一個單一的常見錯誤,如無效憑證,因爲LDAP錯誤很難處理。

乾杯。