目前我們(我和我的公司)有一個asp.net mvc4頁面。我們希望利用通過AD進行身份驗證的登錄頁面。一個要求是不成功的嘗試,我們給用戶一些信息。活動目錄身份驗證與狀態/錯誤代碼結果
我們希望有會是這樣的信息:
- 無效的用戶/密碼
- 帳戶被鎖定
- 密碼過期
這是不熟悉的領域,所以我」我不確定什麼.NET庫可用。到目前爲止,我只是遇到了System.DirectoryServices,但它似乎並不會超出布爾的結果。
這可能嗎?任何參考,建議或例子將不勝感激!
目前我們(我和我的公司)有一個asp.net mvc4頁面。我們希望利用通過AD進行身份驗證的登錄頁面。一個要求是不成功的嘗試,我們給用戶一些信息。活動目錄身份驗證與狀態/錯誤代碼結果
我們希望有會是這樣的信息:
這是不熟悉的領域,所以我」我不確定什麼.NET庫可用。到目前爲止,我只是遇到了System.DirectoryServices,但它似乎並不會超出布爾的結果。
這可能嗎?任何參考,建議或例子將不勝感激!
您可以先使用PrincipalContext.ValidateCredentials驗證您的憑證。如果返回false
,則使用靜態UserPrincipal.FindByIdentity找到您的用戶,如果找到,則查看是否使用IsAccountLockedOut()鎖定帳戶。
您可能需要自己擴展UserPrincipal以查看密碼是否已過期,但我沒有看到直接的屬性/方法。您可以擴展它以直接訪問userAccountControl
屬性,並檢查是否設置了0x800000
位,即PasswordExpired。這裏是more information on the userAccountControl values。
謝謝約書亞!這聽起來很合理,而且看起來是我會選擇的路徑。 –
假設你有這樣的代碼
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錯誤很難處理。
乾杯。
你會如何檢查無效的用戶/密碼?將訪問該網站的用戶不在該域中?...如果我錯了,請糾正我。 – RL89
此解決方案將託管在雲中,我們將控制AD,我們將知道用戶正在驗證哪個域(例如「local.domain」)。在我的演示項目中,我們可以肯定地告訴用戶是否無法通過PrincipalContext.ValidateCredentials()調用進行驗證。這個解決方案的問題是,除了True/False結果之外,我們沒有任何信息,這顯然不會告訴您爲什麼它不成功。我可能會選擇這個,我只是在尋找是否有辦法進行這種認證和獲得更詳細結果的建議。 –