SqlMembershipProvider与自定义解决方案

Haw*_*xby 4 .net asp.net asp.net-membership

我在一个小型的开发人员团队中工作,对于完成一系列核心任务的最佳方法没有达成共识,其中一个是会员提供者.现在我无法确定这是否与缺乏其他思维方式或足够规模的项目有关,需要进行重大调查.

多年来我一直是.net网络开发人员(在此之前是php和asp经典),通常在开发应用程序时,我回避使用内置的.net SqlMembershipProvider主要是因为它看起来经常显得过于复杂,我的需求,其次是因为我只能想象这样一个复杂的数据模型可能会受到性能影响.

通常,我使用自定义成员资格和角色提供程序在相当简单的user -> user roles <- roles类型模式上运行.我维护标准的成员资格提供程序功能,例如帐户恢复,配置文件详细信息,登录帐户锁定失败,机密问题等,具体取决于相关应用程序的需求,例如AD安全应用程序几乎没有其他功能,面向公众的应用程序通常会有商场.它还意味着,如果出现任何需要存储过程来咀嚼用户数据的任务,那么它们很容易编写并且执行得非常好.直接的SQL命令,良好的索引和简单的数据模型,产生了一个高性能,可扩展的解决方案,需要改变我有完全的控制权,可以根据需要进行更改,这是我认为非常宝贵的.

根据您的经验,您会说这是一种过时的方法吗?您是否曾在内置提供程序中遇到任何可伸缩性问题?您通常采取什么方法以及在什么情况下?

谢谢

Str*_*ior 6

除非你特别指出了令人信服的理由,否则我建议你从SQLMembershipProvider开始,并根据需要进行调整.

我们发现内置的提供商为我们提供了所有基础知识,而我们几乎没有任何工作.开发一个良好的安全结构有很多元素,很容易忘记其中一个,或者只是为了变得懒惰,而不是在你自己滚动时以"正确"的方式实现一个.我想到了通过电子邮件密码和密码重置等问题.

当然,SQLMembershipProvider并不是神奇的子弹.我们有一些情况需要做一些更复杂的身份验证.但我们只能通过扩展SQLMembershipProvider而不是替换它来解决这些问题.请参阅我的答案.有什么方法可以扩展.Net成员资格以跟踪用户登录以获取更多详细信息.

我们没有注意到SQLMembershipProvider产生的任何重大性能问题,所以我认为播放性能卡是没有根据的.毕竟,您的用户通常花多少时间登录系统?如果您的所有页面加载速度很快,那么根据您可能会提高性能的(可能是错误的)想法编写所有自己的代码并没有真正的理由.这是我们一直在阅读的可怕的"过早优化".

角色框架对我们的需求来说太简单了,所以我们根本不使用它.但它也没有妨碍.

而且,正如Hogan指出的那样,你更有可能找到已经熟悉内置提供程序工作方式的开发人员,这意味着他们将花费更少的时间来弄清楚你的架构和(希望)更多的时间完成真正的工作.