具有哈希密码的ActiveDirectoryMembershipProvider.ValidateUser

时间:2012-11-30 05:49:50

标签: asp.net-mvc active-directory asp.net-membership

我有一个ASP.NET MVC网络应用程序,要求用户通过验证ActiveDirectoryMembershipProvider来登录他们的域用户名和密码。

登录时我使用ValidateUser(用户名,密码)来验证用户的凭据,然后我设置表单auth cookie,以便在将来的请求中不要求用户再次输入用户名和密码

FormsAuthentication.SetAuthCookie(m.Username, true);

这很好,但我需要定期重新验证用户以确保他们的域密码没有更改,我不希望他们再次输入他们的凭据。

这样做的一种方法就是将用户的密码以纯文本形式存储在会话对象中,或者加密它然后解密它。然后我可以再次调用ValidateUser,并在必要时将用户注销。

在我推出自己的身份验证的其他网络应用程序中,我只需存储用户密码的哈希值,并将其与存储在数据库中的哈希值进行比较。

在ActiveDirectoryMembershipProvider上似乎没有一个方法可以让我这样做。

这里合乎逻辑的事情是什么?

1 个答案:

答案 0 :(得分:1)

答案是定期(每30分钟左右)检查User.IsApproved和User.LastPasswordChangedDate以确保用户凭据仍然有效。

为此,您需要手动创建FormsAuthenticationTicket和cookie,而不是使用FormsAuthentication.SetAuthCookie。

将验证用户的日期放在UserData中,并将其与LastPasswordChangedDate进行比较。

我已经实现了这一点并且完美无缺。

此处有更多信息

Check if Active Directory password is different from cookie