【问题标题】:How to make completely custom authentication/authorization without asp membership如何在没有 asp 成员资格的情况下进行完全自定义的身份验证/授权
【发布时间】:2013-02-18 20:25:25
【问题描述】:

我不想学习如何为 asp mvc 进行完全自定义的身份验证/授权。
如此简单的操作:注册/登录/注销/记住我
我不想再使用 asp 会员资格,但我在网上找不到任何关于如何制作它的从头到尾的教程。
我有点困惑。如果我定制所有东西,我还需要使用SetAuthCookie() 等。
所以我不想自定义MembershipProvider,而是要进行自己的授权/身份验证。
我正在寻找的只是一些完整的资源(如果存在)?
我真的需要关于这个主题的帮助,所以我很感激任何帮助。

【问题讨论】:

  • 到目前为止您尝试过什么?我建议在尝试编写自己的 API 之前先阅读一下 asp.net 会员 API 的工作原理。
  • 但是你为什么要重新发明轮子呢?

标签: c# asp.net asp.net-mvc authentication asp.net-membership


【解决方案1】:

你不想这样做。

开发自己的成员资格课程的问题在于,在 99.999% 的情况下,您都不具备创建安全、可靠、健壮和可靠框架的安全知识。 (另外 0.001% 的时间你是专家,被第三方雇用来做这件事。)

我知道 MembershipProvider 笨重、臃肿而且不像它应该的那样灵活。但它非常安全,比你能写的任何东西都要安全得多。不值得冒险...在开发自己的网站时,您可能会失去对网站、数据以及最重要的是客户数据的控制权。

坚持下去。否则你会后悔的。

【讨论】:

  • 我不同意。尽管重写 ASP.NET 成员的 身份验证 部分是一项冒险的冒险,但除了身份验证之外,框架还有很多内容。用于获取密码的数据层真的与密码检查通过后验证用户的机制一样重要吗?
  • 好吧,我之所以想这样做是因为我得到一些建议,即从我的 Users 表中加入 aspnet_Users 表是不好的(不知道为什么)。这个问题也与这个问题有关stackoverflow.com/questions/14920327/…
  • 将我的自定义用户表加入 aspnet_Users 并在它们之间建立 1:1 关系真的很糟糕吗?
  • @Snixtor - 我们不是在谈论扩展(框架鼓励这样做),而是在谈论重写。我强烈认为重写他希望重写的内容(基于问题)是一个坏主意。
  • 您不一定需要使用 aspnet_Users 表。我建议您研究扩展 ASP.NET 成员资格框架。网上有很多文章解释了如何解决这个问题。例如,您可以执行诸如覆盖 ValidateUser 之类的操作,这将允许您指定自己的逻辑来确定给定用户是否有效。
【解决方案2】:

首先,ASP.NET 成员资格和表单身份验证速成课程。

直接来自提供商 (Microsoft):

“ASP.NET 成员资格为您提供了一种验证和存储用户凭据的内置方式。因此,ASP.NET 成员资格有助于您管理网站中的用户身份验证。您可以将 ASP.NET 成员资格与 ASP 一起使用。 NET 通过与 ASP.NET 登录控件一起使用来创建一个完整的用户身份验证系统来形成身份验证。"

请注意,您“可以将 ASP.NET 成员资格与 ASP.NET 表单身份验证一起使用”。它们是不同的元素。身份验证部分是你不想搞砸的,这是我认为 LeviBotelho (正确地)紧张的部分。但是您也可以正确地使用没有成员身份的表单身份验证!

作为Scott Mitchell points out,在 ASP.NET 2.0 之前,我们甚至没有Membership。他自己的(当然现在已经很老了)article over on 4guysfromrolla 提供了一个基于角色的授权示例,结合了表单身份验证和 not 使用 Membership。这没有任何内在的不安全或风险。

如果您正在尝试摆脱Membership 模式/框架,那么接下来最重要的事情就是密码安全。您的第一个诱惑可能是将用户密码以纯文本形式存储在数据库中。 不要。 Troy Hunt 撰写了有关 Internet 安全的精彩文章,并且比我更好地解释了密码安全的来龙去脉。 This article 比您可能感兴趣的要详细得多(它主要是关于创建密码重置功能),但密码存储的起点非常有效。

关于“我正在寻找的只是一些完整的资源(如果存在的话)?”。你可能不会找到这样的文章。这是一个非常广泛的主题,您最多可以找到每篇文章都提供一些帮助您开发自己的解决方案的文章。

【讨论】:

    【解决方案3】:

    如果您不能 100% 确定,我也认为 @levibotelho 不安全。另一方面,您可以在http://nugetmusthaves.com/Category/Security 找到许多项目 例如:http://altairiswebsecurity.codeplex.com/https://github.com/kristofferahl/FluentSecurity 等等……

    可能是这个:https://github.com/OdeToCode/Memflex brgds!

    更新:@1110 如果您想直接访问表,我建议您使用 simplemembership 而不是旧的会员资格提供程序。 http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx 。如果您需要在配置文件中包含客户字段而不是 blob 等等,则同样的事情......

    【讨论】:

      猜你喜欢
      • 2014-12-06
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多