前言

在B/S系统开发中,经常需要使用“身份验证”。因为web应用程序非常特殊,和传统的C/S程序不同,默认情况下(不采用任何身份验证方式和权限控制手段),当你的程序在互联网/局域网上公开后,任何人都能够访问你的web应用程序的资源,这样很难保障应用程序安全性。通俗点来说:对于大多数的内部系统、业务支撑平台等而言,用户必须登录,否则无法访问和操作任何页面。而对于互联网(网站)而言,又有些差异,因为通常网站的大部分页面和信息都是对外公开的,只有涉及到注册用户个人信息的操作,或者网站的后台管理等才需要提示登录。(如果不做严格验证,后果将很严重,人家一旦猜出你web目录下面的页面名,可以随意访问。当然,一般的开发人员是不会犯这种低智商的错误的)。

如何实现“身份验证”

记得N年前我最早接触Servlet + JSP开发的时候,有一种叫做“过滤器”(Filter)的东西,真是很神奇。有了这件神奇的东西后,我再也不需要去每个页面判断什么“session”或者“cookie”了,就能把未登录用户给弹出去(水平实现有限)。当然,在传统webform开发中,也可以写一个“BasePage的鸡肋”,在该类中去做判断,让每个页面对应的类都去实现这个"鸡肋",我看以前很多公司都是这么干的。

在asp.net中,其实微软提供了一整套的完整的机制来实现“成员角色管理”。包含有:”登录控件”、“membership”、“个性化数据库”等等。但是大多数开发人员是从来不用这些的(例如我,用微软的asp.net三四年,还从来没见过“登录控件”长啥样)。在asp.net身份验证中,主要有三四种。因为有些身份验证的方式是依赖于IIS和windows操作系统的,所以在不同版本的操作系统和IIS上还是有些差异的。由于笔者暂时使用的是windows 7的操作系统,所以就拿IIS 7.5为例子。

首先打开IIS,然后双击右侧“身份验证”,会显示出当前IIS支持的所有的身份验证方式(由于我安装IIS时候,在“安全性”那里我是全部勾选的)。可以看到如图:

大致分为如下几种:

1.活动目录的客户端证书(这个很可能是收费的),不常用,不细说。

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

3.Form身份验证:这个用的很多,后面会细说。

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

5.基本身份验证:其实也是基于windows操作系统的账户验证的。

6.匿名身份验证:谁都可以访问,其内部也是通过指定一个特定的windows系统的user账户来访问的。

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

再来看看经典的 IIS 6的截图:

注:.NET Passport 可以理解为微软对“单点登录”的一种实现方案,这里不细说。感兴趣的朋友可以参考http://baike.baidu.com/view/1182418.htm及相关资料。在“Open API”  "SOA"  “云计算”大行其道的今天,作为一个web程序员,如果你还没听说过“单点登录”,请自行购买开往福州方向的动车票。

先在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浏览器,我在firefox中也能够正常的访问和使用。

匿名身份验证:

所谓匿名身份验证,其实就可以理解为“不验证”。就是匿名用户都可以访问资源,没有任何限制。通常我们的网站,都要启用匿名方式验证,集成windows身份验证。不难发现,其实匿名身份验证,也是通过windows用户组里面的一个特定的用户来通过验证的,如图所示:

最后一种,Form身份验证:

前面所讲的那些身份验证方式,其实都和asp.net没有直接的联系,都是IIS 和操作系统级别的验证方式。而Form 身份验证,则需要asp.net提供支持。因为通常网站的身份验证和成员管理都非常复杂,而不是通过单纯的某一种验证方式能够实现的。对于大部分互联网的网站而言,用户可以访问部分页面,但部分页面必须登录后才能访问和操作,而且不同用户角色登录,操作权限也不一样。这又会涉及到很多方面的知识,而且实现方式也有很多种。

由于篇幅和时间有限,今天就先到此。后期我再详细地去整理关于Form身份验证的详细及成员管理,权限管理方面的文章,敬请期待。

本文出自  http://www.cnblogs.com/dinglang/  ,  http://blog.csdn.net/dinglang_2009  ,转载请注明出处。

asp.net中常用的几种身份验证方式相关推荐

  1. 网络安全渗透中常用的10种渗透测试方式

    1.信息收集 信息收集剖析这是所有侵略恶意攻击前提条件/原曲/基本.根据对互联网信息收集剖析,能够随之.针对性地制订仿真模拟黑客攻击恶意攻击方案,以提升侵略成功概率.减少曝露或被发现了的机率.信息收集 ...

  2. ASP.Net中无刷新执行Session身份验证

    在写一个客户的B/S结构应用程序时,突然发现一个技巧,不知道是否是MS的一个BUG,给相关的有研究的朋友原先考虑写一个检查Session的类,Session失效后,必须转向登陆页面,可每一个调用该类的 ...

  3. asp.net身份验证方式

    ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). 重点内容 Windows身份验证 常结合应用程序自定义身份验证使用使用这种身份验证模式时, ...

  4. [转帖]ASP.NET中常用的优化性能的方法

    ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理) 1.       数据库访问性能优化     数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要 ...

  5. Asp.NET中常用的一些优化性能的方法

    ASP.NET 的缓存机制相比ASP有很大的改进,本文档除对常用优化方法进行总结介绍外,强调了如何使用ASP.NET的缓存来获得最佳性能. 1:不要使用不必要的session 和ASP中一样,在不必要 ...

  6. ASP.NET中常用的文件上传下载方法

    ASP.NET中常用的文件上传下载方法 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务 ...

  7. ASP.Net 中常用的数据库连接方式

    ASP.Net 中常用的数据库连接方式 在ASP.Net中,连接数据库有以下四种方式: 1.System.Data.OleDb.OleDbConnection 2.System.Data.SqlCl ...

  8. ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl

    ASP.NET中常用的几个开源公共类: LTP.Common.dll: 通用函数类库     源码下载 Maticsoft.DBUtility.dll 数据访问类库组件     源码下载 LtpPag ...

  9. python编程中常用的12种基础知识总结

    python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...

最新文章

  1. CodeGen编写自定义表达式标记
  2. 201521123108《Java程序设计》第14周学习总结
  3. Java就业岗位有哪些?可以从事哪些工作?
  4. 那些一眼就被看出包装过的简历
  5. 从硬盘安装在XP下装红旗linux双系统
  6. Spark Streaming三种运行场景
  7. Ink脚本语言学习笔记(三)
  8. Excel·VBA单元格区域行列数转换函数
  9. php ping 检测电脑在线,怎么ping网速(教你如何用ping命令来检测电脑的网速)
  10. 利用FME进行火星、百度坐标反算及误差分析
  11. 企业erp系统服务器,ERP系统是什么
  12. Fuchsia OS简介
  13. LearnOpenGL-CN笔记(一)
  14. JavaScript数据类型及转换
  15. C语言中求两数最大公约数的三种方法
  16. 一本正经的经验帖——如何使用FDM 3D打印机进行批量化生产
  17. Module build failed: Error: ENOENT: no such file or directory, scandir node_modules\node-sass\vendor
  18. Txilm Protocol: Monoxide公链系统中的区块压缩算法
  19. c语言eof_C语言持续深耕
  20. 曾轶可的音乐市场有多大?

热门文章

  1. java计算机毕业设计基于ssm的智能卤菜销售平台
  2. vue前端项目老缺少XXX文件,或者XXX文件丢失错误,最好的解决办法
  3. 苹果M1 Mac惊人体验!
  4. 执业药师的价值体现在哪儿?
  5. 台式计算机键盘配置及价格,组装台式计算机的配置列表是什么?什么是台式机?...
  6. 从十大经典故事中学管理(转贴)
  7. python 中三种定义类的方式
  8. Egg整合antd文件上传以及防踩坑指南
  9. 第五局 阿卡丽教学局 上
  10. AI——四(填充效果和混合效果)