ASP.NET 3.5核心编程学习笔记(48):ASP.NET的安全性之Windows身份验证与Passport身份验证...

ASP.NET身份验证方法

  基于被请求资源的类型,IIS可能会自己处理。如果该资源需要ASP.NET处理,IIS会将该请求连同已验证(或匿名)用户的安全令牌一起交给ASP.NET。

  ASP.NET支持3种验证方法:Windows、Passport、Forms。还有一种选项是None,即ASP.NET本身不会试图执行身份验证,而完全依赖于IIS之前执行的身份验证。在这种情况下,匿名用户也能连接,并可通过ASP.NET默认帐户访问资源。

  我们可通过应用程序的web.config文件根节点下的<authentication>区段来选择ASP.NET身份验证机制。子目录的身份验证模式继承于应用程序的选项。默认的身份验证模式为Windows。

Windows身份验证

  若使用Windows身份验证,ASP.NET需要IIS配合,实际的身份验证工作由IIS完成。IIS会使用下面的某个身份验证方法:基本身份验证、摘要式身份验证和集成Windows身份验证。当IIS对用户进行验证后,它会将安全令牌交给ASP.NET。若ASP.NET使用Windows身份验证,则不需要执行进一步的验证,而是直接使用IIS令牌来授权目标资源的访问。

  通常,在Intranet中,如果应用程序的用户持有Windows帐户,只能由Web服务器进行身份验证的,则会使用Windows身份验证方法。假设Web服务器使用集成Windows身份验证模式,并关闭匿名访问,而ASP.NET应用程序采用Windows验证模式,那么在用户连接到应用程序时会发生什么情况呢?首先,IIS会对用户进行身份验证(如果不存在与本地用户的帐户匹配的Web服务器帐户,也不在受信任的域中,则会弹出一个对话框),然后将安全令牌交给ASP.NET。

使用ACL进行访问的授权

  大多数情况下,Windows身份验证与文件身份验证(通过HTTP模块FileAuthorizationModule)结合使用。Web应用程序中用户特定的页面可通过文件的访问控制列表(access control list,ACL)来防止未授权的访问。当ASP.NET要访问某个资源时,HTTP模块FileAuthorizationModule会被调用。文件身份验证使用主调程序的标识对ASP.NET文件进行ACL检查。也就是说,如果aspx页面的ACL中不包含某个用户,那么该用户就不能访问该资源。

  应注意,文件身份验证不需要在ASP.NET级进行模拟。更重要的是,不论模拟标志是否打开,这种身份验证都能工作。其优势在于,一旦ASP.NET资源的ACL配置好,配置工作也就结束了。未经授权,没人能够访问该资源。那么对于那些非ASP.NET资源(如本地文件)该怎么处理呢?

  例如,我们如何使某个HTML页面不受未经授权的访问?首先要考虑的是,HTML页面很少需要进行保护。如果需要保护某个页面,它可能还包含服务器端代码,而更适合将其转化为aspx。也就是说,根据设计,HTML页面不会受到保护,因为这类页面不会通过ASP.NET管道。如果希望保护它,最好将其重命名为aspx,这样便会由ASP.NET运行库处理。

  HTML页面和其他资源也可以通过NTFS权限进行保护。如果某个文件通过NTFS权限设置了约束,那么在缺少相应权限的情况下,任何帐户都不能访问该文件。

  另外,我们可以将该页面的扩展名改成自定义的,并编写一个转型的ISAPI扩展(或托管HTTP处理程序)来实现特殊的身份验证机制。

  Windows身份验证还可以与URL身份验证配合使用。该验证机制由名为URLAuthorizationModule的HTTP模块实现。该模块会对访问URL资源的用户和角色进行筛选。

Passport身份验证

  Passport身份验证是Microsoft提供的集中式身份验证服务。对于参与该计划的所有网站,Passport能够对其用户进行身份验证。用户只需登录一次,便可自由穿行于所有成员网站。除“单次登录服务(single logon service)”外,Passport还为成员网站提供了“核心配置文件(core profile)”服务。

  ASP.NET提供了名为PassportAuthenticationModule的HTTP模块。Passport成员网站可以用它来为Web应用程序建立身份验证功能。当某个HTTP请求到达启用Passport的Web站点后,该HTTP模块会验证该请求是否包含有效的Passport身份验证票据(ticket)。如果没有,Web服务器会返回状态码302,并将浏览器重定向到Passport登录服务。查询字符串中会包含加密的原始请求信息。当客户端向登录服务器发出GET请求时,要提供该查询字符串。这时,Passport登录服务器会通过HTML登录表单对客户端进行提示。在用户填写该表单后,它会通过SSL安全信道传回代理服务器。

  代理服务器会使用该表单的信息对用户进行身份验证,如果成功,则创建Passport身份验证票据。随后,用户会被指示重定向到原URL,同时在查询字符串中插入加密的票据。最后,浏览器会遵从该重定向的指示,再次请求原来的资源。这时的请求包含了有效的票据,因此,PassportAuthenticationModule会通过该请求。

转载于:https://www.cnblogs.com/free722/archive/2011/05/01/2033807.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值