为什么要使用ASP.NET成员身份安全模型?

为什么要使用ASP.NET成员身份安全模型?,asp.net,security,membership,Asp.net,Security,Membership,我现在正在更新我的网站,我想如果我要更新我的登录/安全模式,现在是一个好时机 我已经浏览了ASP.NET中包含的成员资格模型,但我不相信它除了为其他.NET开发人员所熟悉之外还能带来任何好处 关于它似乎有很多文档,但很少讨论为什么值得这么做 有人能解释一下吗?它就在那里,这样你就不必自己动手了 它的价值在于它是一个易于使用的现成的基于角色的安全框架。如果您已经构建了自己的框架,并且迁移并非微不足道,那么它可能不值得。但是迁移的一个好处是,您可以删除大量的应用程序代码并用框架代码替换。除非您是唯一

我现在正在更新我的网站,我想如果我要更新我的登录/安全模式,现在是一个好时机

我已经浏览了ASP.NET中包含的成员资格模型,但我不相信它除了为其他.NET开发人员所熟悉之外还能带来任何好处

关于它似乎有很多文档,但很少讨论为什么值得这么做


有人能解释一下吗?

它就在那里,这样你就不必自己动手了

它的价值在于它是一个易于使用的现成的基于角色的安全框架。如果您已经构建了自己的框架,并且迁移并非微不足道,那么它可能不值得。但是迁移的一个好处是,您可以删除大量的应用程序代码并用框架代码替换。

除非您是唯一一个在这个特定站点上工作的人,否则我认为.NET开发人员对它很熟悉这一事实是走内置成员路线的一个很好的理由。具有ASP.NET经验的其他开发人员可以迅速加入该项目,并了解您站点的身份验证/授权模型

我们在网站上使用内置的成员资格和角色提供程序模型,效果非常好……我们必须编写自己的提供程序类,因为我们对数据使用了不同的备份存储(我们使用Microsoft Dynamics CRM),但这些类非常简单,并且有很好的文档记录。通过提前做这一点工作,我们现在可以使用代码中的成员资格和角色类,以及页面上与登录相关的各种服务器控件


如果您想将您的站点迁移到任何一种已经制作好的门户软件,如Community Server或DotNetNuke,那么您是否正在考虑其他替代方案?

使用会员资格提供商可以方便地进行迁移。您甚至可以使用现有的数据库,而不必实现新的数据库

对于.Net附带的MembershipProvider,我唯一讨厌的是用户ID是GUID而不是自动递增的标识。我知道使用GUID有好处,但将其集成到现有的系统或模块中可能会很痛苦。

我认为在大型网站上使用成员资格没有什么好处。这已作为ASP.Net身份验证的“最佳”解决方案推向市场。然而,实际上,看起来微软只是试图将旧的会员服务器产品定位为每个人都突然需要的东西

大约10年前,我在微软的会员服务器上工作。他也是shop.microsoft.com的首席开发人员,我可以告诉你,我们在该网站上没有使用内部服务器产品,没有使用商业服务器,也没有使用会员服务器。我不知道他们现在是怎么做的——但我认为当时的普遍共识是,这些类型的软件包通常阻碍了我们的努力

它可能对较小的站点有用,或者如果您的资源有限。。。i、 例如,一个部门或小公司内部网的几百个用户,在那里你不想投入太多的时间或资源。我看得越多,它就越不适合更大的定制网站


我真正不明白的是,几乎每一本ASP.Net书籍似乎都将此作为唯一的方法,而不是唯一的方法。

在阅读了ASP.Net成员资格提供程序中的所有存储过程后,我写了自己的。这并不难,在一天结束时你有更多的控制权

如果您喜欢XML配置、角色的弱类型字符串、默认情况下不安全、目录中散乱的随机web.config文件,而不是页面类上干净的标记界面,即“无需帐户”、单个登录的多个数据库点击,未从当前ObjectContext/DataContext加载的用户对象以及动态更改提供程序的能力(woo-hoo,谁在使用它?!)适用于内置对象

如果没有,构建自己的,但是如果您这样做了,请确保您存储了密码的加密/盐渍散列,并执行正确的加密cookie


[更新以反映评论中的反馈]

我认为ASP.NET成员资格、角色和配置文件的一个引人注目的特性是它使用了提供者模型。如果您对它的现状不满意,那么从基类中推出自己的并不困难。如果你看看codeplex.com,你可能会发现人们编写的十几个或更多的自定义提供者。几年前,我为SQLite数据库编写了一个。成员资格途径运行良好,但有一个致命缺陷,我不怪微软

Internet Explorer是唯一正确处理身份验证缓存的浏览器

您可以关闭Firefox浏览器,打开它,然后恢复最后一个会话,然后直接返回到您的“安全”网站,而无需登录。Chrome也有类似的问题,Mac也有类似的问题

IE有一个javascript调用可以正确处理这个问题:document.execCommand(“ClearAuthenticationCache”、“false”)


它不适用于任何其他浏览器。如果你使用它,你需要强迫用户使用IE。

Hmm那么用户、IPrinciple和MembershipUser是如何关联的呢?用户(我想你指的是Page.User属性)的工作原理与以前一样:它返回一个IPrincipal;特别是RolePrincipal的一个实例。因为我们想跟踪每个用户的附加信息,所以我们也从MembershipUser派生。我们可以调用(OurMembershipUser)Membership.GetUser()。因此,成员身份与MembershipProvider不同?不完全相同;Membership是一个静态类,它公开了许多与成员资格相关的方法(例如CreateUser()、DeleteUser()),这些方法依次调用web.config文件中定义的当前成员资格提供程序类。更多细节:我认为这是使用guid的一个主要原因。在某种程度上,在集成两个系统时