【问题标题】:C# 4 ASP.net *NON MVC* Custom AuthenticationC# 4 ASP.net *NON MVC* 自定义身份验证
【发布时间】:2012-06-19 07:57:46
【问题描述】:

我知道这个问题已经被问过无数次了,但相信我,我已经在 Google 上搜索了几个小时,但一无所获。无论外面有什么,它都是用于 MVC,我没有使用。

我的要求很简单。我不想使用 asp.net 中提供的默认身份验证。我会将用户名/密码/角色存储在我的自定义 SQL Server 表中。我将为用户名/密码和一个验证按钮提供 2 个输入。验证后,他可以访问管理区域。这只会被我的子域“admin.*.com”中的管理员使用。他们每天都会使用此页面向网站添加内容。

  1. 如何实现它。一个教程链接就足够了。
  2. 生产安全吗?我不希望一些新手黑客进入我的网站并将其搞砸。如果不安全,我还有什么选择。

谢谢, 开发

【问题讨论】:

  • “你对 Google 做了几个小时”?!已编辑!顺便说一句,您为什么不想成为我们的 easp.net 会员? msdn.microsoft.com/en-us/library/yh26yfzy.aspx 我问的原因是,虽然你想做的事情是完全可能的,但为什么不使用开箱即用的东西,因为它已经针对你描述的场景进行了设计和测试。自己编写意味着您必须完成所有这些工作。您甚至可以自己自定义 - 请参阅 msdn.microsoft.com/en-us/library/ms366730.aspx
  • 对我来说太复杂了!我想保持简单。我正在为普通用户使用 FB auth。但是,它只适用于管理页面,我想要这个。
  • @dash 可怜的 Google 没有得到爱……或者,更确切地说,得到了不想要的“爱”!
  • 重新发明整个事物比使用现有事物更简单?
  • @Dev - 如果它既快速又简单,您就可以使用表单身份验证。这既快速又简单,可让您保护网站中的文件夹。您可以将用户存储在数据库中:support.microsoft.com/kb/301240 或 web.config 文件中。不过灵活性不大。有关 web.config 参考,请参阅 msdn.microsoft.com/en-us/library/1d3t3c61.aspx

标签: c# asp.net authentication


【解决方案1】:

根据我们的 cmets,鉴于您不愿实施 ASP.Net Membership provider(值得花时间进行调查 - 您现在可能不觉得它是正确的,但它可能很方便。我也有同感一开始是这样,但维护自己的代码和基础设施的成本很快被证明是虚假的经济)你至少有两个其他选择:

1) 简单的表单身份验证

将所有管理页面放在一个文件夹下,例如 /Admin,然后使用Forms Authentication 保护对该文件夹的访问。只有在databaseWeb.Config 中定义的用户才能访问这些页面。这不如 ASP.Net 成员资格灵活,但可以为您提供您想要的大部分内容。就安全性而言,这将与您的网站一样安全、经过充分测试并且有据可查。

2) 使用 Facebook OAuth

您提到您的用户可以访问 Facebook。你可以为你使用Facebook to do the authentication。尽管您无法获取用户名和密码,但您可以取回一个令牌,然后您可以针对已知的权限集进行验证。不过,这比 1) 要做的工作要多得多,并且会将您与 Facebook API 未来可能发生的变化联系起来。但是,它还得益于经过良好测试和安全,但您几乎无法控制实际用户信息。

顺便说一句,也请考虑对 Google 好一点!

【讨论】:

  • 我已经实现了 Facebook OAuth。我真的很想进一步定制 ASP.Net 成员资格,可能是在 GoLive 之后,但不是现在。别担心,我们都太爱谷歌了!
【解决方案2】:

您可以创建自己的自定义会员提供程序,它具有您正在寻找的功能。asp.net membership provider

出于安全目的,最好使用久经考验的方法。请记住,您可以自定义任何提供者,包括角色提供者,甚至可以创建自己的独特提供者。

【讨论】:

    【解决方案3】:

    这是一个如何LDAP authentication using ASP.NET 1.1 的示例。该逻辑可能仍然适用,或者可以适应更高版本的 ASP.NET,尽管我还没有测试过。

    使用内置的会员提供程序,或实施您自己的,并不能保证黑客无法访问您的系统。您必须考虑的事项:

    1. 在客户端和服务器之间加密数据
    2. 不要在数据库中存储密码,甚至不加密。如果可以的话,对每个密码进行哈希处理。
    3. 强制执行strong password entropy
    4. 确保会话和授权 cookie 标记为 HttpOnly 和 Secure
    5. 对于管理员密码,制定一个经常更改它们的策略(例如每月一次)
    6. 提供在有人登录其帐户时通知管理员的方法
    7. 暂时锁定超过每秒请求数且认证失败的ip地址
    8. 当用户在 y 分钟(例如 10)内输入密码超过 x(例如 10)次(例如 10)时,暂时锁定用户。

    这些只是要寻找的一小部分。您还必须担心会话劫持、javascript 攻击等。

    这不是一件小事。

    【讨论】:

      【解决方案4】:

      编写自定义身份验证处理程序非常危险。有很多方法可以让它出错并使您的网站容易受到攻击。

      我也理解您对表单身份验证极其复杂的抱怨。我面临着类似的十字路口,并决定建立自己的身份验证系统FSCAuth。它是 BSD 许可的。它的设计非常简单,并且允许您可以成像的几乎任何数据库格式。设置它所要做的就是在您的数据库中实现一个小的 4 函数接口并填充一些配置字段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 2014-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-14
        相关资源
        最近更新 更多