27

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

我已经查看了包含在 ASP.NET 中的 Membership 模型,但我不相信它会提供除了其他 .NET 开发人员熟悉之外的任何好处。

似乎有相当多的文档,但很少讨论为什么值得付出努力。

任何人都可以对此有所了解吗?

4

9 回答 9

14

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

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

它可能对较小的站点很有用,或者如果您的资源有限……例如,对于一个部门或小型公司的 Intranet,有几百个用户,您不想在其中投入太多时间或资源。我看的越多,它似乎就越不适合更大的自定义网站。

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

于 2010-04-17T01:05:59.253 回答
9

在阅读了 ASP.NET Membership 提供程序中的所有存储过程后,我编写了自己的代码。这并不难,而且您在一天结束时拥有更多的控制权。

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

如果没有,请自己构建,但如果这样做,请确保存储密码的加密/加盐哈希,并请执行适当的加密 cookie。

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

于 2010-04-17T01:44:44.043 回答
6

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

我们在我们的站点上使用了内置的 Membership 和 Role 提供程序模型,它工作得非常好......我们必须编写自己的 Provider 类,因为我们对数据使用不同的后备存储(我们使用 Microsoft Dynamics CRM),但是这些类非常简单且有据可查。通过预先完成这些工作,我们现在可以在代码中使用 Membership 和 Roles 类,以及页面上各种与登录相关的服务器控件。

您是否正在考虑另一种选择?

于 2009-01-13T20:15:26.403 回答
3

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

于 2009-01-13T22:10:21.460 回答
1

它的存在只是为了让您不必自己动手。

于 2009-01-13T20:14:18.107 回答
0

我认为 ASP.NET Membership、Role 和 Profile 的一个引人注目的特性是它使用了提供者模型。如果你对它的现状不满意,从基类中推出你自己的并不难。如果您查看 codeplex.com,您可能会发现人们编写的十几个或更多自定义提供程序。几年前我为 SQLite 数据库写了一个。

于 2012-02-04T20:48:52.957 回答
0

如果您想将您的站点迁移到任何类型的已经制作好的门户软件——例如 Community Server 或 DotNetNuke,使用会员提供程序可以轻松迁移。您甚至可以使用现有的数据库,而不必实施新的数据库。

于 2009-01-13T22:04:01.160 回答
0

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

于 2009-01-13T20:15:04.297 回答
0

会员制路线运作良好,但有一个致命缺陷,我不怪微软。

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

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

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

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

于 2015-02-11T15:12:57.320 回答