最近,一位同事建议使用内置的MS会员,角色和个人资料提供商是一个坏主意。然而,他没有真正详细解释为什么,如果你正在努力建立高容量网站,他确实提到了架构是坏的。想知道社区对此有何看法?好奇如果最好自己动手或使用内置的MS提供商?这个舞台上最好的做法是什么?
答案 0 :(得分:2)
这个问题可能会被认为是主观的和有争议的,但是这里有一些与我相比更聪明的人的好点和观点的链接,供你自己考虑和决定:
我自己坚信互联网驾驶执照的概念。
滚动自己是一个坏主意,除非你真的没有强大的安全要求。作为一般经验法则,我们的Web开发人员在安全性方面表现不佳。 ASP.NET成员资格工具是由擅长安全性的人编写的 - 为一家公司工作的人(在我看来,这种公司的声誉受到不公平的损害),并且通过正确的方式来证明这一点。
但是,如果您必须在使用内置提供程序和自己编写提供程序之间做出选择,我会反对您的同事所说的内容。
尽管代表不好,但微软非常关注安全问题,如wealth of information freely provided to developers on this subject alone所示。在我凭借自己的能力建立一个安全的系统之前,我会相信它们。
至于性能,我没有对内置提供商有任何负面影响,但我认为我正在使用的网站数量特别大(每天只有大约10,000次点击)。
最终编辑 -
如果您使用内置提供商,OWASP网站会提供有关推荐设置的信息:https://www.owasp.org/index.php/Reviewing_Code_for_Authentication
答案 1 :(得分:1)
<&意见GT;
我对内置提供程序的体验是它有效...有时......我做的一些项目的问题是它没有提供我们想要的那么多自定义或它提供的定制无论如何,我们做了很多工作。当然,我在一些人的编程旁边是一个n00b。
所以它真的归结为你想要的。 MS SQL提供程序是否可以正常运行并执行您想要的操作?大!用那个。其他明智的,我会说你自己做。
< /&意见GT;
答案 2 :(得分:1)
提供者模型的主要问题在于它来自ASP.NET 2.0 Web表单时代,其中可测试性的优先级远低于使组件易于使用。提供者模型鼓励使用静态类和静态方法来使事情有效,使其可能难以测试,并且这被纳入平台的认证和授权机制,例如Membership.GetUser()
及其对IIdentity.Name
和RolePrincipal
的使用以及Roles.IsUserInRole(string role)
作为两个主要示例的使用。更重要的是,由于实例如何被框架实例化和控制,人们需要花些时间强迫他们使用像控制反转和依赖注入这样的模式。这可以引导人们推出自己的解决方案。
总而言之,提供程序是一种经过验证的可信方法,可用于ASP.NET应用程序中的可靠身份验证和授权。如果你知道你正在做什么,你可以不用它们,但如果你不知道,或者花时间了解它们的工作方式,以及如何在系统中更灵活地提供类似的功能,或者只是使用它们直到它们成为一个问题。
答案 3 :(得分:1)
我使用了Membership,Role和Profile模型来编写适合我需求的自定义提供程序,而其他许多提供程序也是如此。您没有被锁定在Provider模型中。您需要进行研究,确定它是否符合您的需求,并做出适当的决定。您现在可以使用OpenId和较新的BrowserID等产品,这些产品可以轻松地与Microsoft的提供商模型集成,以实现您的目标。没有人拿着枪对准你的头。了解事实,做一些研究,并决定什么是适合你的。如果你想看看其他人做过的一些很好的例子,请在codeplex.com上搜索,其中有许多不同的产品。