Authentication ASP.NET成员资格:成为还是不成为?

Authentication ASP.NET成员资格:成为还是不成为?,authentication,asp.net-mvc-2,asp.net-membership,authorization,Authentication,Asp.net Mvc 2,Asp.net Membership,Authorization,我正在考虑如何使用ASP.NET和MVC2实现授权和身份验证。让我们将其称为用户系统 我在野外见过三种解决方案: 使用内置的ASP.NET成员系统() 滚你自己的() 为ASP.NET成员身份创建抽象层() 我一直在读你的想法,很多人说,如果你不注意安全细节,尝试运行你自己的“用户系统”可能会更危险。另一方面,解决方案要简单得多。所有内容都可能存储在一个数据库中,特定于用户的内容存储在一个users表中。这个解决方案的开销似乎很低 使用ASP.NET成员身份解决方案可以使用很多现成的功能,但

我正在考虑如何使用ASP.NET和MVC2实现授权和身份验证。让我们将其称为用户系统

我在野外见过三种解决方案:

  • 使用内置的ASP.NET成员系统()
  • 滚你自己的()
  • 为ASP.NET成员身份创建抽象层()
我一直在读你的想法,很多人说,如果你不注意安全细节,尝试运行你自己的“用户系统”可能会更危险。另一方面,解决方案要简单得多。所有内容都可能存储在一个数据库中,特定于用户的内容存储在一个users表中。这个解决方案的开销似乎很低

使用ASP.NET成员身份解决方案可以使用很多现成的功能,但IMHO确实令人困惑。您可能需要将成员身份信息存储在自己的数据库中,并以某种方式将用户实体从特定于站点的数据库链接到ASP.NET数据库

如果您使用的是ASP.NET成员身份

  • 您的数据库模式是什么样子的?您如何创建与ASP.NET成员资格用户(即歌曲FavoriteShongs(SiteUsers)aspnet_用户)的外部关系
  • 你为什么不自己滚
如果你有自己的

  • 您使用了哪种类型的用户系统抽象层(如果有的话)
  • 你为什么不使用ASP.NET会员资格

通过分析这些可能性,我真的不知所措。请把我踢向正确的方向,从这个会员瘫痪的粘性网络!谢谢。

内置的会员资格提供商已经很安全,而且非常容易使用。您可以在几个小时内启动并运行内置会员资格。或者(取决于您正在构建的应用程序的类型),您也可以使用StackOverflow使用的方法进行检查

此外,使用内置的成员资格提供程序,创建关系就像使用“uniqueidentifier”将aspnet_用户表(我记不起头顶上的确切名称)与相关表关联一样简单

我将我所有的成员资格“资料”存储在与系统数据库相同的数据库中,它从未让我出错。创建会员资格“东西”也很容易。只需对希望成为asp.net成员的数据库运行


同样的道理。

许多人选择不使用自己的身份验证系统是有充分理由的!这是非常危险的,有很多小方法可以让你出错,让你的网站受到攻击

一、 然而,我是其中一个冒险者,我自己也有。我反复检查了每一行代码的安全漏洞,到目前为止,自从我发布了身份验证系统的1.0版以来,我还没有修补过任何安全漏洞。无论如何,我的身份验证系统已命名并获得BSD许可

  • 您使用了哪种类型的用户系统抽象层(如果有的话)
我不太明白你的意思。我基本上有一个层,在其中检索用户数据并将其写入数据库。FSCAuth实际处理cookies和HTTP身份验证的一层。还有一层,你告诉FSCAuth“嘿,只有当当前用户在Admin组中时,才应该看到这个页面”

我的UserData类非常简单,只需要4个字段:Username、PasswordHash、UniqueID和Salt。这就是FSCAuth所依赖的。如果您需要更多的字段,您可以从UserData类继承表单,它的工作方式也一样

  • 你为什么不使用ASP.NET会员资格
我在内置的ASP.Net身份验证中发现了很多不足之处

  • 如果您想使用内置成员资格提供程序以外的任何东西,则必须编写大量代码
  • 有时候你必须自己处理饼干,我认为这很危险
  • 几乎不可能使用河豚哈希算法
  • 每次页面加载都要多次往返数据库
  • 有状态会话(当用户登录时,会将一条记录放入数据库)使扩展到多个服务器变得更加困难,通常会给数据库服务器带来更多不必要的压力
  • 细粒度身份验证(可以查看A个人的电子邮件,但不能查看B个人的电子邮件)比我想象的要困难
  • 伪装
  • 这些问题中有许多是设计出来的,我相信这是试图制作一款能让所有人都满意的软件的征兆

    嗯,在FSCAuth,我设计了很多东西,老实说,它不可能适合每个人。。但在许多常见场景中,它比ASP.Net成员身份更易于使用。可以在阳光下使用任何哈希算法。一个数据库命中进行身份验证。无状态登录。唯一ID可以是字符串中的任何内容。等等

    因此,如果您在处理ASP.Net的内置身份验证和使用自己的身份验证之间犹豫不决,请先看看FSCAuth。如果没有别的,它将成为你自己滚动的一个很好的起点