【问题标题】:What are the pros and cons using the asp.net membership?使用 asp.net 会员资格有什么好处和坏处?
【发布时间】:2011-05-14 10:11:21
【问题描述】:

我正在建立一个新网站,一位朋友建议我使用 asp.net 会员身份进行身份验证过程(登录、注册、密码恢复等)。

我看到所有内容都存储在一个 XML 文件中。

我想知道使用会员资格而不是从头开始构建一些东西的优点和缺点。

【问题讨论】:

    标签: c# asp.net xml membership


    【解决方案1】:

    MS 登录解决方案由几个部分组成。

    身份验证 - “谁可以访问您的网站”

    表单身份验证 - 这基本上创建了一个安全的 cookie,上面写着“我已通过身份验证!”在每一个请求。如果没有这个,用户将不得不登录每个页面。

    • 优点:效果很好
    • 缺点:无 - 使用它

    会员资格 - 这是您存储用户及其密码以及验证用户凭据的方式。有几种方法可以解决这个问题:

    1. 使用 SqlMembershipProvider - Microsoft 为您提供了一个数据库来安全地存储用户/密码,并为您提供了一种验证凭据的方法。
      • 优点:
        • 需要维护的自定义代码更少/没有。 “开箱即用”
        • 使用会员控制和 API
      • 缺点:
        • 您必须使用 Sql Server 并使用其数据库架构。 (IMO 不是问题)
        • 无法控制最初生成密码的方式。它们又长又丑
        • 随着您对技术的熟悉,学习曲线更加陡峭
    2. 创建自定义 MembershipProvider - 您可以从 MembershipProvider 继承来自定义存储数据的位置和方式。

      • 优点:
        • 您可以免费获得加密/解密密码
        • 控制存储用户的位置以及数据的外观
        • 您仍然可以使用会员控制和 API
      • 缺点:
        • 必须实施自己的存储解决方案
        • 您必须编写、调试和维护大量自定义代码
        • 如果添加其他功能,则必须强制转换提供程序才能使用它
    3. 创建自己的身份验证方案

      • 优点:完全控制
      • 缺点:
        • 您创建了所有内容,但必须调试/维护所有内容。
        • 您必须自己控制凭据的安全性。
        • 无法使用会员控制(这不是什么大损失,因为控制很容易复制)
        • 无法使用会员 API

    授权 - “用户可以做什么?”

    角色 - 角色控制用户可以通过 authorization mechanism provided by the web.config 执行的操作,并且还与站点地图上的安全修剪一起使用。

    1. 使用 SqlRoleProvider - Microsoft 为您提供了一个数据库来存储角色

      • 优点:
        • 适用于 web.config
        • 您可以为一个用户分配多个角色
      • 缺点:
        • 角色只是一个字符串,不支持“权限层次结构”。这会使创建用户可以编辑其他用户的规则变得困难。
    2. 创建自定义 RoleProvider - 您可以从 RoleProvider 继承来自定义存储数据的位置和方式。

      • 优点:适用于 web.config
      • 缺点:
        • 必须实施自己的存储解决方案
        • 仍然只是一个字符串,与之前的解决方案一样受限
        • 如果您没有正确实现它,它可能会执行大量数据库调用。
    3. 创建自己的身份验证方案

      • 优点:完全控制 - 只需对您的页面进行自定义检查并根据需要进行错误/重定向
      • 缺点:
        • 不适用于 web.config/sitemap 提供的授权机制。实际上,这意味着将页面添加到文件夹(例如 /Admin)不再保证该页面的安全性。

    请务必注意,成员资格和角色提供者可以相互独立地选择或自定义。如果可以的话,我个人建议使用 SqlMembershipProvider 并评估角色提供者的选项。

    【讨论】:

      【解决方案2】:

      我不喜欢使用 Membership Provider。

      当场景是“标准”时,这是实用程序,但如果您需要更多自定义规则,我认为效果不佳。出现“变通办法”。

      并且不需要存储在 XML 中,存在另一种解决方案(例如数据库)。

      【讨论】:

        【解决方案3】:

        缺点:

        • 您的首选数据存储可能无法立即获得完全支持

        • 它可能不符合您当前或未来的要求

        • 您可能不完全理解其工作原理的复杂性(对于您自己构建的东西)

        优点:

        • 与自己滚动相比,您可能会节省时间。

        个人...如果这是一个严肃的项目,我会推出你自己的(但当然要保持表单身份验证)。以我的经验,MS 的许多“开箱即用”功能都是半途而废的。

        【讨论】:

        • 我同意大多数人都是半途而废(我在看着你,RoleProvider),但 MembershipProvider 非常好。
        【解决方案4】:

        关于 ASP.Net Membership 的好处是您可以随心所欲地使用 - 您可以以各种形式存储用户数据(正如其他人所提到的),或者您可以只使用 ASP.Net Membership处理会话授权和页面保护。

        例如,您可以全力以赴并使用登录控件、SQLMembershipProvider 后端,让 ASP.Net Membership 端到端地完成所有事情。

        或者您可以将您自己的用户名和密码存储在您自己的数据库表中,自己验证提供的详细信息,然后只需使用“FormsAuthentication.RedirectFromLoginPage()”告诉 ASP.Net 成员用户已通过身份验证,并拥有ASP.Net Membership 然后控制对页面的访问。

        ASP.Net Membership 已经过测试和测试,被微软内外的数千个站点使用,因此您知道代码运行良好且运行良好。如果有问题,那么有很多实现可以找到它。您自己的方法只有一个用户...

        【讨论】:

          【解决方案5】:

          实际上,并非所有内容都必须存储在 XML 文件中。您可以通过多种方式存储会员数据,包括数据库。

          您还可以使用 ASP.NET 角色/成员库作为滚动自己的起点。在互联网上有一些关于这样做的教程。

          使用内置函数的优点是 ASP.NET 成员 gui 控件或多或少“正常工作”.. ;)

          【讨论】:

            【解决方案6】:

            在我看来,.NET 成员资格提供程序是一个很好的方法。我已经使用它们编写了很多大型应用程序。如果您的架构良好,那么在未来版本中添加功能和更改数据就相当简单了。

            这里有一些上下文来构建我的答案。 .NET 中的成员资格/角色/配置文件解决方案由两部分组成:框架和提供者。该框架由您的程序将与之交互的方法和信息组成。提供者决定如何存储数据。

            我发现这个框架很棒。不管你想如何与之交互,没有什么是你不能做的。默认实现确实为您免费提供了很多东西。如果您使用良好的编码实践,任何缺乏功能的情况都会进一步减轻。请参阅入门 ASP.NET MVC 应用程序,了解包装成员框架的绝佳示例。

            数据似乎永远不会按照您想要的方式运行,但没有什么是您无法解决的。首先,正如人们所说,.NET 附带了许多提供程序。这也是实现您自己的提供程序发挥作用的地方。我们通常从子类化SqlMembershipProvider 开始。如果某些东西不能按照我们想要的方式工作,我们会覆盖它。如果需要,以后更改数据表也不是很困难。

            使用已经存在的东西似乎总能让我们快速上手并根据需要进行调整。实际上,此代码的更改并不经常发生。一开始使用 Microsoft 解决方案可能无法完成最漂亮的工作,但它可以快速完成工作并让您继续解决重要问题。

            【讨论】:

              猜你喜欢
              • 2012-06-02
              • 1970-01-01
              • 1970-01-01
              • 2011-11-28
              • 2011-08-14
              • 1970-01-01
              • 2012-08-29
              • 2011-01-14
              • 1970-01-01
              相关资源
              最近更新 更多