穷人的认证

时间:2010-02-05 06:30:19

标签: asp.net security authentication

我正在为一些小型企业开发一个ASP.NET网站。该站点需要一个受密码保护的区域,站点所有者将在该区域管理站点内容。对于世界其他地方,该网站是完全只读的。

我设计并实施了以下方案:

  • 用户想要访问某些受保护的页面。
  • 每个受保护的页面都会继承“AdminIface”主页,它会改变UI,以便用户知道他在受保护的页面上,并检查安全cookie。如果没有cookie或错误的cookie:重定向到auth.aspx。
  • Auth.aspx使用RNGCryptoServiceProvider生成一个大的随机数,然后将其发送到客户端+密码表。
  • 用户输入密码。
  • 客户端JavaScript结合随机种子+密码,计算结果字符串的MD5,将MD5发布到服务器。
  • 服务器将随机种子与Session保持的值进行比较,如果确定它结合了随机种子+密码,计算MD5,比较MD5。
  • 如果校验和匹配 - 服务器会生成一个更大的随机数作为安全cookie。
  • 服务器将安全cookie存储在Session对象中,并将cookie发送给现在被认为已授权的客户端。

正确的密码在auth.aspx源中存储为字符串常量。

这个计划好吗?

P.S。我知道AD + Kerberos要好得多,但是在godaddy的共享主机上我甚至没有特权创建一个应用程序。

6 个答案:

答案 0 :(得分:4)

我只是将用户身份验证硬编码到web.config中。这意味着您仍然可以使用Membership控件。可以看到一个非常好的例子here。不需要数据库,也不需要成员资格。如果您有一个用户(或很少用户),那么这是一个非常好的选择。

如果您担心web.config中的身份验证详细信息,那么您可以{web}配置encrypt specific sections

这似乎是一个比你实施的更简单的解决方案。

答案 1 :(得分:2)

听起来不错。标准的HMAC东西。无论你的弱点如何:

  1. 应用程序:依赖于javascript和会话
  2. 安全性:使用新的代码库
  3. 根据您的要求,您可能没问题。我说我强烈建议使用表单身份验证,它可以克服这些问题以及更多......而且它很容易使用。

答案 2 :(得分:1)

嗯,为什么http://en.wikipedia.org/wiki/Basic_access_authentication与https(甚至没有)?

- 威胁的真实情况是什么?

您的方法似乎有点手工制作。通常的规则是尝试使用现有的安全系统,而不是发明自己的安全系统。发明一种非常安全的新认证机制是一个非常难的问题。

答案 3 :(得分:1)

许多聪明人(即创建WEP的软件工程师)在创建自己的安全认证机制时尝试失败并且失败了。搞砸自己的“自定义”安全认证的可能性是无穷无尽的(没有冒犯,但即使是安全专家也难以处理这个问题。)

我认为最好使用经过验证的工作,例如基于SSL证书的身份验证方法。

答案 4 :(得分:0)

TLS / SSL有什么问题?它会在这里提供许多好处,其中最少的是网站的一些线程 - >用户身份验证。

答案 5 :(得分:0)

正如已经提到的那样,为什么不直接使用带有SSL证书的表单身份验证 - 易于设置(特别是对于一个用户)并且您知道它已经过测试...您不知道自己在做什么可能错过了。