2011-08-30 60 views
2

最近一位同事建议使用内置的MS Membership,Role和Profile提供程序是一个不好的主意。他并没有真正详细解释为什么,但是,他确实提到,如果您正在为高容量网站工作,那么架构很糟糕。想知道社区的意见是什么?好奇的是,如果最好推出自己的产品或使用内置的MS提供商?这个领域的最佳做法是什么?asp.net会员/角色/配置文件提供程序 - 好还是坏?

+2

您可以通过从MembershipProvider继承或直接从f.e.构建一个自定义MemebrshipProvider(http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx)。 SqlMembershipProvider的。不确定你的同事是否会这样做。但我不认为完全重新发明轮子是一个好主意。 –

+1

我同意,提供者模型是一种在.NET中实现身份验证的可靠方法,并且可以提高互操作性。它具有可以安全强化的弱点,但重新发明轮子通常会导致使用会话的不安全实现或类似的可怕事情。 – TheCodeKing

回答

2

这问题可能要被关闭,主观和争论,但这里有好点的价钱一定的联系,从人比我聪明,你要考虑并决定自己:

  1. http://www.codinghorror.com/blog/2010/11/your-internet-drivers-license.html
  2. 从上面的文章,但联系到值得它自己的链接:http://www.codinghorror.com/blog/2008/05/openid-does-the-world-really-need-yet-another-username-and-password.html
  3. https://www.owasp.org/index.php/Guide_to_Authentication

我是互联网驾驶执照概念的坚定信徒。

除非您确实没有强大的安全要求,否则自己制作是个坏主意。作为一般的经验法则,我们的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

+0

我很困惑openid与OP提到的asp.net提供商有什么关系。也不确定什么认证与OP提及的提供商有关...不认为他在谈论滚动他自己的认证/授权。只是饼干供应商是否可以。就个人而言,我讨厌会员供应商的实施,并没有看到创建自定义会员供应商的要点... –

+0

@B Z - 我明白不想使用提供商。然而,回答你的评论,如果你看他的问题中的最后一句话,它确实会说“好奇是否最好推出自己的产品或使用内置的MS提供商?”这就是我为什么不推出自己的细节的原因。 OpenId作为一种替代方案被抛入其中,因为他不止考虑两个选项。另外,Jeff Atwood在那些关于地球上每个开发者的问题的文章中都提出了一个非常好的观点,提出了他们自己的机制和标准。 – David

+0

谢谢你们......非常棒的输入......正是我在寻找的东西。特别是大量的网站是主要领域,openId可以帮助。此外,我确实找到了OpenID的aps.net提供程序包装 - 也许这是获得两全其美的好方法! – bbqchickenrobot

1

<意见与内置的>

我的经验提供者是它的工作原理......有时候......我所做的一些项目的问题是它没有提供我们想要的那么多的定制,或者它提供的定制是我们自己推出的那么多工作。当然,我在编程旁边有一些n00b。

所以它真的归结为你想要的。 MS SQL提供程序是否可以正常工作并执行您想要的任何操作?大!使用它。其他方面,我会说自己做。

< /意见>

1

的主要问题在提供者模型夷为平地的是,它从ASP.NET 2.0 Web表单时代,可测试性的使得组件易于使用的要低得多优先冰雹。提供者模型鼓励使用静态类和静态方法使事情发挥作用,使其可能难以测试,并将其融入到平台的身份验证和授权机制中。 Membership.GetUser()及其使用IIdentity.NameRolePrincipal及其使用Roles.IsUserInRole(string role)是两个最好的例子。更重要的是,由于框架实例化和控制实例的方式,需要花费一些时间来强制它们使用模式控制和依赖注入等模式。这可能导致人们推出自己的解决方案。

所有这一切说,供应商是一个尝试和可靠的方法来坚实身份验证和授权在ASP.NET应用程序。如果你知道自己在做什么,你可以在没有它们的情况下做,但如果你不这样做,要么花时间了解它们是如何工作的,以及如何在系统中更灵活地提供类似的功能,或者直到它们变为一个问题。

+2

我永远不会编写依赖于成员资格的代码,它不是真的依赖这些静态方法,它们只是提供者实例的快捷方式。相反,我会使用DI来注入MembershipProvider,它可以被模拟,同样的原理和IIdentity是高度可测试的。 – TheCodeKing

+0

Reliance不是合适的词,但它们是最常用于获取实例的道路,很像'HttpContext.Current'用于获取流水线外的当前上下文(即使通过容器设施方法注入)。使用DI注入提供者需要提供者注册才能委托给提供的容器。我的观点是,像你这样拥有多年经验的人拥有建立一个松散耦合和高度凝聚力系统的技能和知识,并且努力解决直接依赖性,难以测试代码和...... –

+0

你可能也有技能和知识来推出自己的会员和角色实施,但不是每个人都这样做。因此,除非你真的知道你在做什么,否则请使用提供者。 –

1

我已经使用Membership,Role和Profile模型来编写适合我需求的自定义提供程序,而其他许多人也都这样做了。您没有锁定到提供者模型。你需要做研究,确定它是否符合你的需求,并作出适当的决定。您现在可以提供诸如OpenId和较新的BrowserID之类的产品,这些产品可以轻松地与Microsoft的提供商模型集成以实现您的目标。没有人拿着枪到你的头上。获取事实,做一些研究,并决定什么是适合你的。如果您想查看别人所做的其他示例,请在codeplex.com上搜索哪些地方有多种不同的产品。

+1

这是事实......只要方法调用匹配,我就可以做任何我想要的内容。在下载RavenDB成员资格提供程序后出来。很好的例子!并感谢或提示! – bbqchickenrobot

相关问题