【发布时间】:2011-05-14 10:11:21
【问题描述】:
我正在建立一个新网站,一位朋友建议我使用 asp.net 会员身份进行身份验证过程(登录、注册、密码恢复等)。
我看到所有内容都存储在一个 XML 文件中。
我想知道使用会员资格而不是从头开始构建一些东西的优点和缺点。
【问题讨论】:
标签: c# asp.net xml membership
我正在建立一个新网站,一位朋友建议我使用 asp.net 会员身份进行身份验证过程(登录、注册、密码恢复等)。
我看到所有内容都存储在一个 XML 文件中。
我想知道使用会员资格而不是从头开始构建一些东西的优点和缺点。
【问题讨论】:
标签: c# asp.net xml membership
MS 登录解决方案由几个部分组成。
表单身份验证 - 这基本上创建了一个安全的 cookie,上面写着“我已通过身份验证!”在每一个请求。如果没有这个,用户将不得不登录每个页面。
会员资格 - 这是您存储用户及其密码以及验证用户凭据的方式。有几种方法可以解决这个问题:
创建自定义 MembershipProvider - 您可以从 MembershipProvider 继承来自定义存储数据的位置和方式。
创建自己的身份验证方案
角色 - 角色控制用户可以通过 authorization mechanism provided by the web.config 执行的操作,并且还与站点地图上的安全修剪一起使用。
使用 SqlRoleProvider - Microsoft 为您提供了一个数据库来存储角色
创建自定义 RoleProvider - 您可以从 RoleProvider 继承来自定义存储数据的位置和方式。
创建自己的身份验证方案
请务必注意,成员资格和角色提供者可以相互独立地选择或自定义。如果可以的话,我个人建议使用 SqlMembershipProvider 并评估角色提供者的选项。
【讨论】:
我不喜欢使用 Membership Provider。
当场景是“标准”时,这是实用程序,但如果您需要更多自定义规则,我认为效果不佳。出现“变通办法”。
并且不需要存储在 XML 中,存在另一种解决方案(例如数据库)。
【讨论】:
缺点:
您的首选数据存储可能无法立即获得完全支持
它可能不符合您当前或未来的要求
您可能不完全理解其工作原理的复杂性(对于您自己构建的东西)
优点:
个人...如果这是一个严肃的项目,我会推出你自己的(但当然要保持表单身份验证)。以我的经验,MS 的许多“开箱即用”功能都是半途而废的。
【讨论】:
RoleProvider),但 MembershipProvider 非常好。
关于 ASP.Net Membership 的好处是您可以随心所欲地使用 - 您可以以各种形式存储用户数据(正如其他人所提到的),或者您可以只使用 ASP.Net Membership处理会话授权和页面保护。
例如,您可以全力以赴并使用登录控件、SQLMembershipProvider 后端,让 ASP.Net Membership 端到端地完成所有事情。
或者您可以将您自己的用户名和密码存储在您自己的数据库表中,自己验证提供的详细信息,然后只需使用“FormsAuthentication.RedirectFromLoginPage()”告诉 ASP.Net 成员用户已通过身份验证,并拥有ASP.Net Membership 然后控制对页面的访问。
ASP.Net Membership 已经过测试和测试,被微软内外的数千个站点使用,因此您知道代码运行良好且运行良好。如果有问题,那么有很多实现可以找到它。您自己的方法只有一个用户...
【讨论】:
实际上,并非所有内容都必须存储在 XML 文件中。您可以通过多种方式存储会员数据,包括数据库。
您还可以使用 ASP.NET 角色/成员库作为滚动自己的起点。在互联网上有一些关于这样做的教程。
使用内置函数的优点是 ASP.NET 成员 gui 控件或多或少“正常工作”.. ;)
【讨论】:
在我看来,.NET 成员资格提供程序是一个很好的方法。我已经使用它们编写了很多大型应用程序。如果您的架构良好,那么在未来版本中添加功能和更改数据就相当简单了。
这里有一些上下文来构建我的答案。 .NET 中的成员资格/角色/配置文件解决方案由两部分组成:框架和提供者。该框架由您的程序将与之交互的方法和信息组成。提供者决定如何存储数据。
我发现这个框架很棒。不管你想如何与之交互,没有什么是你不能做的。默认实现确实为您免费提供了很多东西。如果您使用良好的编码实践,任何缺乏功能的情况都会进一步减轻。请参阅入门 ASP.NET MVC 应用程序,了解包装成员框架的绝佳示例。
数据似乎永远不会按照您想要的方式运行,但没有什么是您无法解决的。首先,正如人们所说,.NET 附带了许多提供程序。这也是实现您自己的提供程序发挥作用的地方。我们通常从子类化SqlMembershipProvider 开始。如果某些东西不能按照我们想要的方式工作,我们会覆盖它。如果需要,以后更改数据表也不是很困难。
使用已经存在的东西似乎总能让我们快速上手并根据需要进行调整。实际上,此代码的更改并不经常发生。一开始使用 Microsoft 解决方案可能无法完成最漂亮的工作,但它可以快速完成工作并让您继续解决重要问题。
【讨论】: