我开始使用'会员'框架(正如您在过去的5篇文章中所注意到的那样)。
在我的代码中,我继承了SqlMembershipProvider
类并覆盖了这些函数,因为我的数据库不符合默认情况下所需的模式。
所以我想问的问题是:
为什么我应该使用Membership
类,当我可以使用我希望在我的应用程序中使用的函数创建自己的类时?
Roles
框架也是如此。
答案 0 :(得分:3)
简短回答:说到安全性,不要以为你知道自己在做什么。如果你试图自己做,那么你可能会做错了!
安全性很难!
Microsoft已经花费了大量资源来实现Membership和Roles框架。只要它们符合您的需求,那么为什么要创建自己的东西呢?此外,通过使用标准框架,您的解决方案将与使用相同框架的其他项目兼容。在您的情况下,这可能是也可能不是问题。
答案 1 :(得分:1)
首先,如果你有自己的preexisitng用户数据库,你可能不会试图强迫SqlMembershipProvider
使用它。 SqlMembershipProvider
是抽象MembershipProvider
类的完整实现,为了正常运行,它需要一个具有正确模式的数据库。
相反,您应该创建自己的抽象MemberShipProvider
类实现。要开始使用,请创建一个类CoultonsMemebshipProvider
并将其派生自System.Web.Security.MembershipProvider
。然后将光标放在 MembershipProvider 中并单击Ctrl+.
,然后选择实现抽象类... 。然后,Visual Studio将为您可以实现的方法添加许多代码。
在看到VS插入代码后,该任务看起来确实令人生畏。但请记住,您只需实际实现应用程序所需的部件。对于您不需要的方法和属性,保留默认throw new NotImplementedException();
确定。
现在为您提问“ 我为什么要使用会员级别...... ”,答案很简单。这是一个久经考验,经过深思熟虑的抽象,可以在构建身份验证方案时指导您正确的方向。
也就是说,如果您强烈认为自己实际上并不需要会员资格提供者,那么您仍然可以使用FormsAuthentication
并获得它提供的好处。如果您想探索此选项,请查看Scott Mitchell的FormsAuthentication上的tutorial(特别是简介部分)。
答案 2 :(得分:0)
Asp.net为“会员”框架提供了许多钩子。
您可以根据需要自定义它。 请看implementing a CustomMembership provider。
这允许您对表进行身份验证,然后成为框架的一部分。
public class MyMembershipProvider : MembershipProvider
{
public override bool ValidateUser(string username, string password)
{
//check user credentials
return IsUserValid;
}
}
在web.config中:
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear />
<add name="MyMembershipProvider"
applicationName="MyApp"
Description="My Membership Provider"
passwordFormat="Clear"
connectionStringName="MyMembershipConnection"
type="MyApp.MyMembershipProvider" />
</providers>
</membership>