手机版

详细说明ASP中的七种身份验证方法和解决方案 网

时间:2021-09-08 来源:互联网 编辑:宝哥软件园 浏览:

在B/S系统的开发中,经常需要“认证”。由于web应用非常特殊,不同于传统的C/S程序,默认情况下(没有任何认证方式和权限控制手段),你的程序在互联网/局域网上发布后,任何人都可以访问你的web应用的资源,因此很难保证应用的安全性。一般来说,对于大多数内部系统和业务支持平台,用户必须登录,否则无法访问和操作任何页面。对于互联网(网站)来说,有一些区别,因为网站的大部分页面和信息通常是对公众开放的,只需要在涉及注册用户个人信息的操作或者网站的后台管理时提示登录即可。(如果不做严格的核查,后果会很严重。一旦人们猜出了你的网页目录下的网页名称,他们就可以随意访问。当然一般的开发者不会犯这么低智商的错误。

如何实现“认证”

记得n年前第一次接触Servlet JSP开发的时候,有个东西叫“Filter”,真的很神奇。有了这个神奇的东西,我不再需要去每个页面判断什么是“会话”或者“cookie”,然后就可以弹出登录的用户了(实现的水平有限)。当然,在传统webform的开发中,也可以编写一个“BasePage的鸡肋”,在这个类中进行判断,让每个页面对应的类实现这个“鸡肋”。我想很多公司以前都这样做过。

在ASP.NET,微软实际上提供了一套完整的机制来实现“成员角色管理”。包括:“登录控制”、“会员资格”、“个性化数据库”等。但是大多数开发人员从来不使用这些(例如,我已经使用微软的ASP.NET三四年了,我从来没有见过登录控件是什么样子的)。ASP.NET有三四种认证。由于某些身份验证方法依赖于IIS和windows操作系统,因此不同版本的操作系统和IIS之间存在一些差异。由于笔者暂时使用的是windows 7操作系统,我就以IIS 7.5为例。

先打开IIS,然后双击右边的“身份验证”,会显示出目前IIS支持的所有身份验证方式(因为我安装IIS的时候,都是在“安全”里面勾选的)。你可以看到图:

大致分为以下几类:

1.active directory的客户端证书(这很可能是收费的),不常用,不再赘述。

2.ASP.NET模拟(MSDN:如果您想在ASP.NET应用程序的非默认安全上下文中运行ASP.NET应用程序,请使用ASP.NET模拟。),我听不懂机器人在说什么。

3.表单认证:这个用的很多,后面会详细说明。

4.windows身份验证:基于windows操作系统的用户或域用户的身份验证。

5.基本认证:其实也是基于windows操作系统的账号认证。

6.匿名身份验证:任何人都可以访问它,它的内部也可以通过指定windows系统的特定用户帐户来访问。

7.摘要式身份验证:使用Windows域控制器对请求访问Web服务器内容的用户进行身份验证。

让我们看看经典IIS 6的截图:

注:NET Passport可以理解为微软“单点登录”的一种实现方案,这里就不详细介绍了。

首先在IIS 7上测试基本身份验证:

首先,禁用所有其他身份验证方法,然后仅启用“基本身份验证”。有图有真相:

然后打开IE、FireFox、chrome等浏览器,键入localhost,等待在IIS上打开默认网站。你会发现浏览器端会弹出提示框信息,不同的浏览器上弹出框的样式和表达方式是不一样的。(长时间不用IE后,发现老流氓360改了哥哥主页,自称“安全上网”,明显是篡改。我不明白。)

在FireFox中:

如果您在弹出框中输入正确的windows帐户和密码,您可以正常浏览您请求的网页。如果你没有失败或犯错误,等待你的将是一个401错误(401,你知道)。

“网站未启用SSL,将通过电缆以明文形式发送……”,机器人说的话听起来有些尴尬,下面,我来解释一下。

当你不花钱购买SSL证书(安全套接字层)时,你可以简单地理解为正常的http请求是以明文形式传输的,使用SSL可以帮助你自动加密http消息,即使有人在互联网上拦截它们,也无法解密。当我们偶尔访问一些网站时,看到的“https://www.xxx.com”很可能是基于SSL证书的。至于“用明文电报……”,其实这句话很不对。首先,电缆只是一种传输介质,它只传输电脉冲、光信号等。而不是网络协议消息(学过计算机网络的人都知道)。至于说“以明文形式”,也是不对的。事实上,在“基本身份验证”中,用户名和密码是用Base64编码的。感兴趣的读者可以使用httpwatch或Fiddler等工具来监控http请求,这里我就不做演示了。只是因为Base 64编码容易解码,和纯文本没什么区别。这样你会发现“基础认证”确实有很多不安全的因素。

在IIS 7上测试windows身份验证:

和之前的基本认证差不多,我就不截图演示了。如果用户输入正确的windows用户名和密码,他们可以正常访问网站。如果输入不正确,它将返回401.1(以前的基本身份验证是401.2)。值得一提的是,我记得一位ASP.NET MVP曾经告诉我,在使用windows身份验证时,只有用户在使用IE浏览器时才能正常访问。因为在这种情况下,浏览器不是使用http消息传输,而是直接与操作系统内部交互,验证用户名和密码。确认后发现这句话后半句是正确的,确实无法监控http实体内容。但不限于IE浏览器,我在火狐也能正常访问和使用。

匿名身份验证:

匿名认证实际上可以理解为“不认证”。也就是说,匿名用户可以不受任何限制地访问资源。通常,我们的网站应该启用匿名身份验证并集成windows身份验证。不难发现,匿名身份验证实际上是由windows用户组中的特定用户验证的,如图所示:

最后,表单验证:

事实上,上面提到的所有身份验证方法都与ASP.NET没有直接关系,而是IIS和操作系统级别的身份验证方法。表单认证需要ASP.NET的支持。因为网站的认证和成员管理通常非常复杂,这不是简单的认证方法可以实现的。对于大多数互联网网站,用户可以访问一些页面,但有些页面只有登录后才能访问和操作。而且不同用户登录的操作权限也不同。这将涉及到知识的很多方面,实现的方法也很多。

由于空间和时间有限,我们今天就到此为止。后面我会详细梳理表单认证、会员管理、权限管理的细节,敬请期待。

以上就是本文的全部内容,希望对大家的学习有所帮助。

版权声明:详细说明ASP中的七种身份验证方法和解决方案 网是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。