0

我开始使用“会员”框架(您可能已经从我过去的 5 篇文章中注意到了)。

在我的代码中,我继承了SqlMembershipProvider类并覆盖了函数,因为我的数据库不适合默认情况下所需的架构。

所以我想问的问题是:

Membership当我可以使用我希望在我的应用程序中使用的功能创建自己的类时,我为什么要使用该类?

Roles框架也是如此。

4

3 回答 3

3

简短的回答:在安全方面,不要假设您知道自己在做什么。如果您尝试自己做,那么您可能会做错!

安保太难了!

Microsoft 已花费大量资源来实施成员资格和角色框架。只要它们符合您的需求,那么为什么要创建您自己的东西呢?此外,通过使用标准框架,您的解决方案将与也使用相同框架的其他项目兼容。在您的情况下,这可能是也可能不是问题。

于 2012-08-24T12:47:49.017 回答
1

首先,如果您有自己的预先存在的用户数据库,您可能不应该试图强迫SqlMembershipProvider用户使用它。SqlMembershipProvider是抽象MembershipProvider类的完整实现,要正确运行,它需要具有正确模式的数据库。

相反,您应该创建自己的抽象MemberShipProvider类实现。首先,创建一个类CoultonsMemebshipProvider并让它派生自System.Web.Security.MembershipProvider. 然后将光标放在MembershipProvider内并单击Ctrl+.然后选择实现抽象类...。然后,Visual Studio 将为您可以实现的方法添加大量代码。

起初看到 VS 插入的代码后,这个任务看起来确实令人生畏。但请记住,您只需要实际实现应用程序需要的部分。可以为不需要的方法和属性保留默认值。throw new NotImplementedException();

现在对于您的问题“我为什么要使用 Membership 类... ”,答案很简单。这是一个久经考验、经过深思熟虑的抽象,在构建身份验证方案时可以引导您朝着正确的方向前进。

也就是说,如果您强烈认为您实际上并不需要会员提供商,您仍然可以使用FormsAuthentication并获得它提供的好处。如果您想探索此选项,请查看Scott Mitchell 撰写的有关 FormsAuthentication 的本教程(特别是介绍部分)。

于 2012-08-24T13:43:33.803 回答
0

Asp.net 为“会员”框架提供了很多挂钩。

您可以根据需要对其进行自定义。看看实现一个 CustomMembership 提供者

这使您可以对表进行身份验证,但仍是框架的一部分。

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>
于 2012-08-24T12:53:26.457 回答