1

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

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

FormsAuthentication.SetAuthCookie(m.Username, true);

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

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

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

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

在这里做什么是合乎逻辑的?

4

1 回答 1

1

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

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

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

我已经实现了这一点,并且效果很好。

更多信息在这里

检查 Active Directory 密码是否与 cookie 不同

于 2012-12-02T12:00:20.317 回答