我不得不为了适应我们的数据库模式创建我目前的ASP .NET项目自定义成员资格提供者,我有问题将其配置为闭锁用户,如果他们得到他们的密码3次错误,如由标准提供商支持。

这是不是我需要实现我自己,还是应该把它本来应该支持?

我没有代码与它(并没有成员似乎对付它专门的接口)专门处理,但如果我需要实现我自己,我怎么去通知他们被锁定用户?我需要提高某种异常的的ValidateUser?

<强>解决方案

耻辱,我不能标记两个答案,由戴夫 - [R提供的链接,在成员的工作给予了极大的深入了解,以及什么Zhaph指出,正是我终于实现了,处理锁定逻辑自定义成员资格提供。

我然后通过使用登录控制的LoginError事件处理的错误条件,并在那里检查是否该用户是在为了显示适当的错误消息被锁定。

有帮助吗?

解决方案

斯科特·米切尔写优异系列上ASP.NET站点教程。此链路包括创建自定义提供商信息和讨论了锁定逻辑:

http://www.asp.net/LEARN/security/教程-06-cs.aspx

但也没有内置的方法来解锁帐户(即你有,如果你正在使用类似的SqlMembershipProvider东西通过数据库工具来做到这一点)。斯科特也写了有关创建用户界面来管理这一点,你可以在这里找到的一篇文章:

http://www.asp.net/LEARN/security/教程-14-vb.aspx

其实,我建议你阅读整个系列。 Scott的优良的通信。

我希望这有助于。

其他提示

这是东西,你必须自己写。

默认数据库模式具有以下的列在表aspnet_Membership:

IsLockedOut
FailedPasswordAttemptCount
FailedPasswordAttemptWindowStart

在尝试计数将在尝试窗口内的每一个失败的尝试被增值,而在第一尝试失败的时间被存储在窗口起始列,一旦FailedPasswordAttemptCount等于从配置maxInvalidPasswordAttempts,所述IsLockedOut被设置。

由于米歇尔指出,您的ValidateUser方法则需要基于提供的配置设置,以检查这些值 - 默认情况下它们是:

maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10"

一旦用户有最大的登录尝试,你需要确保你已经设置MembershipUser.IsLockedOut从您的供应商设置 - 然后你可以检查该值并做出相应的表现 - 如果你使用的是默认登录控件,这个值可能已经被检查你。

复制,导致锁定(太多不好的登录尝试)的条件。 由于会员供应商做了一趟他们的后端每一次,它是明智的限制了这种方法与MaxInvalidPasswordAttempts的合理数量的供应商。

if (0 < Membership.MaxInvalidPasswordAttempts && Membership.MaxInvalidPasswordAttempts < 100)
       {
                for(int i = 0; i <= Membership.MaxInvalidPasswordAttempts; i++)
                {
                    Membership.ValidateUser(userName, "jfdlsjflksjlkfjsdlkfjsdl");
                }
        }

在自定义的会员供应商,你应该实现的ValidateUser功能。在那里,你不仅检查用户名和密码是正确的,但你也检索您的数据存储无效的密码尝试等的数量。如果用户名/密码有效,重置密码尝试次数,工作会对增加的尝试计数。所述的SqlMembershipProvider还存储LastAttempt日期时间,因此,因为你不能在一定的时间范围内尝试不能方式暴力破解你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top