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