19

.net 会员资格有任何替代\mods 吗?

我觉得它非常严格;

  • 不能轻易更改用户名。您必须创建一个新用户并复制字段,但随后您会丢失主键,或者您必须自己直接编辑用户表。

  • 其他配置文件字段作为一个 blob 一起存储。

4

5 回答 5

13

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

不过,另外一个是询问现有的替代方案,而不是尝试自己构建新的东西。

于 2009-03-31T19:24:04.440 回答
8

我会继续在这里列出我的替代方案。我推出了自己的身份验证库,我认为公开发布它已经足够棒了……所以我做到了。它的设计目的是不妨碍您,总体而言,它非常简约。我没有提供很多开箱即用的用户控件,但在大多数网站上,我看到从未使用过那些内置的用户控件。因此,我没有尝试制作更灵活的用户控件,而是决定让创建自己的登录控件等变得非常简单。

该项目称为快速、安全和简洁的身份验证,简称 FSCAuth。它是 BSD 许可的。你可以在BinpressBitbucket上下载它

它灵活的“UserStore”模型(Form 相当于提供者)使您能够以任何方式构建数据库。它可以支持纯文本文件、XML、MongoDBSql Server以及介于两者之间的任何地方。

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

  • 无状态认证系统。无需在数据库或内存中跟踪用户会话。这使得扩展到多个服务器变得微不足道,需要对您的身份验证代码进行少量(如果有的话)更改
  • 使用任何东西作为每个用户的唯一 ID。没错,没有更多的 GUID!任何适合字符串的东西都是公平的游戏
  • 内置 HTTP 基本身份验证。您可以仅在您想要(或全局)的页面上启用基本身份验证,并且您可以像使用典型的基于 cookie 的身份验证一样进行相同的调用
  • 很难让人不安全。由于它是如何工作的,并且我尽可能少地将核心代码留给最终用户进行实际身份验证,它非常安全,除非你真的试图破坏它,否则它将保持这种状态。我处理 cookie、HTTP Basic Auth 和所有散列。您只需给 FSCAuth 一个数据库以将其放入。
  • BCrypt 对哈希的支持是微不足道的。怎么做。. 在表单身份验证中几乎不可能
  • 我喜欢 :)

当然它也缺少,公平地说,我将包括一些缺少的东西

  • 在 IIS 6 中验证静态文件是不可能的(还)
  • 没有暴力预防(还)。这意味着您需要确保同一个人不会在 2 秒内尝试访问您的登录页面 200 次。
  • 它没有内置在 ASP.Net 中
  • 没有 Windows 或 Passport 身份验证(没有计划添加)
于 2011-07-05T21:07:51.543 回答
2

由于 ASP.NET 成员模型是围绕提供者构建的,因此有许多可用的替代方案。

默认情况下,用户有一个 ProviderUserKey,它是一个 GUID,它是数据库的主键,所以如果你愿意,你应该可以写一些东西来改变他们的用户名。

就配置文件而言,是的,默认 blob 相当烦人。您可以查看将配置文件映射到表的SQL 表配置文件提供程序,或者相当快地推出您自己的.

于 2009-03-31T19:27:14.917 回答
0

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

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

当然有 .NET Membership 替代方案,但大多数都是错误的或具有小功能集。在一个之上开发两个月然后意识到它不会支持你需要的所有功能真的很糟糕。.NET Membership 是一个经过验证的解决方案,这就是它经常使用的原因。

于 2009-03-31T19:25:25.750 回答
0

至于 Profile 有几个选择。这两个使用表或让您调用存储过程。当然你也可以实现你自己的。我个人厌倦了使用 Profile Providers,并发现在我的代码中处理配置文件更容易控制和包含。

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

于 2009-03-31T19:26:46.090 回答