【问题标题】:ActiveDirectoryMembershipProvider.ValidateUser with hashed password带有散列密码的 ActiveDirectoryMembershipProvider.ValidateUser
【发布时间】:2012-11-30 05:49:50
【问题描述】:

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

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

FormsAuthentication.SetAuthCookie(m.Username, true);

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

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

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

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

这里的逻辑是什么?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    我已经实现了它,并且效果很好。

    更多信息在这里

    Check if Active Directory password is different from cookie

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-08
      • 2016-06-13
      • 2011-02-18
      • 1970-01-01
      • 2020-11-09
      • 2012-12-10
      • 2015-08-13
      • 2012-05-30
      相关资源
      最近更新 更多