现在的位置: 首页 > 综合 > 正文

asp.net不要Windows认证,自定义基于数据库的安全认证

2011年08月26日 ⁄ 综合 ⁄ 共 996字 ⁄ 字号 评论关闭
在实际的系统中,往往要自定义基于数据库的认证系统,比如你的WebService要给你的供应商或者客户调用,你要管理他们的账号和权限。显然基于证书、Windows和Passport的验证都不理想,ASP.net中支持自定义的只有Form认证。我们知道Fom认证要在网络中传输明文密码,要安全只有依靠SSL通讯。

上面提到的几种认证方式都是Asp.net原生的,可以利用IPrincipal。.Net中有四种方式可以利用IPrincipal作权限检查, 在Web设定和代码中都很方便。

怎么增加更安全的登录方式,又能利用IPrincipal呢?

第一种:传送加密后的密码。
定义一个Login WebService, 当然是允许匿名访问的。比较用户提交的Hash过的密码,成功后调用System.web.security.FormsAuthentication中的静态方法来登录,设定认证Cookie给客户端。在后续用户请求时根据Cookie判断用户是否登录过。
优点:
  密码一次Hash,计算量少
缺点:
  要求WS客户端使用Cookie(问题不大)
  安全性不强,如果有人侦听到加密后的密码,可以模仿攻击

第二种:利用摘要认证(Digest Authentication)
在IIS中文摘认证只能基于Windows账户,包括基本认证,给人的错觉是他们是Windows家族的,你要用安全的认证方式,必须用Windows账号。实际上他们是rfc2617标准,没有必要和Windows账户绑定。
在asp.net中实现摘要认证需要利用Filter概念,类似ISAPI.
优点:
  可以同时用于aspx和asmx的保护
  可以利用浏览器的密码保存和Session管理。
  安全性强
缺点:
  每次访问都要多次计算Hash
  需要客户端支持摘要认证(似乎也不是问题)

实际上以上两种认证方式可以合并在一个模块中,根据需要灵活选用。

参考资料:
http://blog.joycode.com/zjf/posts/16737.aspx
http://www.eggheadcafe.com/articles/20030701.asp
http://gensystem.europe.webmatrixhosting.net/al/articles/147.aspx

悬案问题:
摘要认证怎么Logout?
Ream是用户无关的?
HttpHeader中文乱码
身份传递

抱歉!评论已关闭.