昨天我花了大量时间阅读这个主题,但仍然觉得我不知道该走哪条路。在身份验证和授权方面,我来自“自己动手”的背景。我们从未使用过Forms身份验证,更不用说Membership API了。看看我们的旧代码,我们将使用会话变量来捕获/控制用户是否已登录等。通过这个新项目,我即将承诺,我想让我们回到正轨,我们应该开始做什么,哪个是使用框架提供的工具。
我已经有了一个我将要使用的数据库架构,但它并不是一成不变的;如有必要,我可以对其进行更改。在此模式中,已有一个Users表,使用整数作为主键。此表还包含其他信息,如名字和姓氏。我还有基于UserId的外键到其他表,如电话和地址。下面我概述一些想到的优点/缺点。
默认提供商
赞成
缺点
自定义提供商
赞成
缺点
可能还有其他一些我还没有考虑过的事情,因为我之前从未使用过这些东西,这让我有点不舒服。
谢谢。
答案 0 :(得分:2)
我最近不得不做出同样的选择,并决定创建自定义提供商。
我这样做的最大原因归结为默认的数据库架构。所有默认的db对象都是在dbo架构中创建的,并以'aspnet_'或'vw_aspnet'等为前缀。对我而言,这是一次真正的岔路。如果还没有看到它们,请运行aspnet_regsql.exe来创建它们。
此外,Steven Sanderson在Pro ASP.NET MVC 2 Framework中说明了这一点:
... SqlProfileProvider使用特别恶心的数据库模式,其中配置文件条目存储为冒号分隔的名称/值对,因此基本上无法查询。
总的来说,值得关注API,因为关注点明确分离,跨项目重用,以及与ASP.NET的其余部分集成,但您只想将内置的SQL存储提供程序用于小型或一次性项目。
我还没有完成创建自定义提供程序的整个过程(我在使用Azure Table存储时做了部分实现),但我计划将来在多个项目中使用这些提供程序,所以我觉得这样的努力是值得的。
答案 1 :(得分:1)
如果您正在构建新的应用程序,我会毫不犹豫地使用asp.net默认提供程序。您始终可以决定不使用默认控件并以编程方式创建自己的控件。您还可以使用任何开源预先创建的用户管理工具来节省大量时间。同时,您始终可以将包含的信息扩展到默认表中。
答案 2 :(得分:1)
就个人而言,我使用SqlMembershipProvider作为独立实体,而我的数据库的其余部分在Oracle中。我从不看数据库,因此名字和GUID不会打扰我(看不见,不在乎)。它开箱即用,非常棒!
在我的场景中,我在Oracle数据库中有一个用户表,我在创建/删除成员资格用户时没有插入/删除(没有GUID)。我认为成员资格数据库是“主”记录,而Oracle表基本上是支持表的参照完整性。在官方交易中并没有真正完成,但我使用try / catch来保持它们的同步性。
角色提供者真的是有限的,如果你想要任何类型的分层或动态角色,你就会被烘烤。但它是一个完全独立于会员资格的独立系统,您不必使用它。
控件还不错。它们中的很多都支持模板,因此您可以向它们添加自己的控件,并有大量事件可以挂钩。不要害怕滚动自己的控件,但首先给出默认控件。 Membership API的易用性确实有助于创建这些控件。
答案 3 :(得分:0)
就个人而言,我会选择框架提供的内容。在这种情况下,没有理由推出自己的身份验证。
在过去,你可能想要自己做事,但现在没有理由。
我想如果你试图自己写这个,你就会重新创造轮子,这需要花费太多的时间和资源才能做到正确。特别是在处理安全问题时。