2012-11-30 73 views
1

我有一個ASP.NET MVC的Web應用程序,它需要用戶通過驗證ActiveDirectoryMembershipProvider與他們的域用戶名和密碼登錄。ActiveDirectoryMembershipProvider.ValidateUser與哈希密碼

在登錄時我用的ValidateUser(用戶名,密碼)來驗證用戶的憑據,然後我設置窗體身份驗證cookie的,這樣在將來的請求用戶不要求輸入自己的用戶名,並再次密碼

FormsAuthentication.SetAuthCookie(m.Username, true); 

這很好,但我需要定期重新驗證用戶以確保他們的域密碼沒有改變,我不希望他們再次輸入他們的憑證。

這樣做的一種方式就是將用戶密碼以純文本形式存儲在會話對象中,或者將其加密後再解密。然後我可以再次調用ValidateUser,並在必要時將用戶註銷。

在其他我已經推出自己的認證的網絡應用程序中,我只是簡單地存儲用戶密碼的散列並將其與存儲在數據庫中的散列進行比較。

ActiveDirectoryMembershipProvider上似乎沒有一個方法可以讓我這樣做。

這裏要做什麼合乎邏輯的事情?

回答

1

答案是定期(每30分鐘左右)檢查User.IsApproved和User.LastPasswordChangedDate以確保用戶憑證仍然有效。

爲此,您需要手動創建FormsAuthenticationTicket和Cookie,而不是使用FormsAuthentication.SetAuthCookie。

將您在UserData中驗證用戶的日期與LastPasswordChangedDate進行比較。

我已經實現了這一點,它完美的作品。這裏

更多信息

Check if Active Directory password is different from cookie