Fork me on GitHub
IIS7中 ASP.NET授权功能如何实现对静态文件的控制

IIS7中 ASP.NET授权功能如何实现对静态文件的控制

前序

     .net提供了3种用户认证的方式,分别是Windows,Forms,Passport。这几种形式的定义可以在网站根目录下Web.config中的authentication节点中看见。我们常用的是forms形式。forms验证就是表单认证,提供了以身份id和密码的形式进行验证和授权管理的功能。

它运行的一个流程:

 

 

配置web.config

     配置方法如下,没有验证的用户根据配置自动跳转到loginUrl里面的页面去登陆。

		<authentication mode="Forms">
			<forms loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx"/>
		</authentication>

配置授权设置

     同样是在web.config中的<system.web>下增加如下节点,“?”的意思指匿名用户,而“*”则表示所有用户。下面这个意思就是说根目录下的所有页面拒绝被匿名用户访问。当然你也可以在users中填写指定的用户ID,不过那样并不常用。还有deny,allow的顺序是先写allow完了再deny,不然就会出现问题。这个大家要记住。

		<authorization>
			<deny users="?"/>
		</authorization>

关键点

      现在问题是当我们要控制访问的文件是静态文件,比如图片、html页面时,在Visual Studio自带的Devolopment Server使用一点问题也没有。但是在发布到IIS上时就会出现问题。web.config中配制的授权对静态内容不起作用,明明这个test.html页面被限制匿名访问了,但还是能不登录就看到。分析其原因是因为这些静态内容IIS根本就没有转交给aspnet_isapi进行处理,所以配置的授权对它们根本不起作用。

解决办法

      IIS7有两种运行模式:经典模式和集成模式。两种模式下的设置是不一样的。

      1、先来看集成模式:此模式下需修改两个模块(UrlAuthorization、FormsAuthentication)的默认配制,取消选择“仅针对向ASP.NET应用程序或托管处理程序发出的请求调用  ”

 

      记住UrlAuthorization、FormsAuthentication这两个模块都要改,刚开始我只改了UrlAuthorization,结果匿名用户倒是访问不了了,但是页面没有自动转到登录页面,显示如下错误:

 

       2、再来看经典模式下,此时类似于IIS6,只要添加上通配符脚本映射就行了。

 

总结

      其实原理很简单,都只是要让IIS把静成内容都转交给asp.net处理就OK了。

 
 
分类: asp.net
标签: IIS
posted on 2013-08-01 23:14  HackerVirus  阅读(1848)  评论(0编辑  收藏  举报