.NET Membership的替代方案

19

有没有替代或者修改的.NET Membership插件?

我觉得它太过限制性了:

  • 不能轻松更改用户名。你需要创建一个新用户并复制字段,但是这样你就会失去主键,或者你必须自己直接编辑用户表。

  • 额外的个人资料字段作为一个二进制大对象存储在一起。

5个回答

13

ASP.Net成员资格使用提供程序模型。这意味着您完全可以自由地实现自己的成员资格提供程序,甚至可以继承和扩展现有的提供程序,只要您遵循提供程序合同

赞一个,因为您询问了现有的替代方案,而不是尝试自己构建新的东西。


8
我将在此列出我的替代方案。我已经开发了自己的身份验证库,并且我认为它非常棒,足以公开发布...所以我这么做了。它旨在不干扰您,并且整体上非常简约。我没有提供很多开箱即用的用户控件,但是在我看过的大多数网站中,这些内置用户控件从未被使用。因此,我决定不再努力制作更灵活的用户控件,而是使创建自己的登录控件等变得非常简单。
该项目称为快速、安全和简洁身份验证(Fast, Secure, and Concise Authentication),或简称FSCAuth。它采用BSD许可证。您可以在BinpressBitbucket下载它。

它灵活的“UserStore”模型(表单提供程序的等效物)使您可以按照自己的方式形成数据库。它可以支持纯文本文件、XML、MongoDBSql Server,以及两者之间的任何地方。

以下是我认为它特别优于表单身份验证的列表:

  • 无状态认证系统。不需要在数据库或内存中跟踪用户会话。这使得在多个服务器上扩展变得非常容易,而且几乎不需要更改您的身份验证代码。
  • 可以使用任何东西作为每个用户的唯一ID。没错,不再需要GUID了!任何适合字符串的东西都可以使用。
  • 内置HTTP基本身份验证。您可以仅在需要的页面上(或全局)启用基本身份验证,并且可以进行与使用典型基于cookie的身份验证相同的调用。
  • 难以不安全。由于其工作方式和我尽可能少地将核心代码留给最终用户来执行身份验证,因此它非常安全,除非您真的试图破坏它,否则它将保持安全。我处理Cookie、HTTP Basic Auth和所有哈希操作。您只需提供一个数据库给FSCAuth即可。
  • BCrypt支持哈希很容易。 如何做到这一点。 在表单身份验证中,这几乎是不可能的
  • 我喜欢它 :)

当然,它也有不足之处,为公平起见,我将列举一些缺点

  • 在IIS 6中无法验证静态文件(尚未实现)
  • 没有暴力破解防护(尚未实现)。这意味着您需要确保同一个人不能在2秒内多次尝试登录您的页面。
  • 它不是内置于ASP.Net中的
  • 没有Windows或Passport身份验证(也没有添加计划)

2
由于ASP.NET成员模型是建立在提供程序之上的,因此有许多可选方案。
默认情况下,用户具有ProviderUserKey,它是一个GUID,并且是数据库的主键,因此如果您想要更改他们的用户名,应该能够编写一些代码来实现。
在配置文件方面,默认的blob相当烦人。您可以查看将配置文件映射到表格的SQL Table Profile Provider,或者相当快地自己创建一个。

@Dan - 我所指的UserID是数据库表aspnet_Membership和aspnet_users中的主键,确实被称为UserId。 - Zhaph - Ben Duguid

0

关于更改用户名,可以使用CreateNewUser()方法并根据当前用户填写适当的字段,然后删除当前用户来轻松实现。

配置文件字段不是.NET Membership提供程序模型的一部分,而是Profile Provider的一部分。这是一个备受争议的话题,对于大多数生产机器来说,正确的方法是使用更好的配置文件提供程序解决方案,例如Table Profile Provider,它将配置文件字段存储为您所期望的方式,而不是作为占用内存的大块数据。或者,您可以轻松地自己编写配置文件提供程序,请查看此处的说明

确实有一些.NET Membership替代方案,但大多数都存在缺陷或功能集较小。在开发两个月后才意识到它无法支持您需要的所有功能,这真的很糟糕。.NET Membership是一种经过验证的解决方案,这就是为什么它经常被使用的原因。


2
如果您创建新用户,它也会为其生成新的ID,对吗?如果用户已被其他表引用,则不好。 - XOR
不,但在你的“更改”用户名的方法中很容易修复。 - JoshJordan

0

关于个人资料(Profile)的问题,有几种替代方案。这两种方法分别使用表格或让您调用存储过程。当然,您也可以自己实现。我个人厌倦了使用个人资料提供程序,并发现在我的代码中处理个人资料更容易控制和包含。

至于其他问题,您也可以自己实现提供程序。微软发布了SQL提供程序的源代码,因此可以为您提供一个起点。


请问您能否解释一下为什么您没有使用配置文件提供程序模型? - kseen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接