ASP.NET Development Server 上的文件授权
在文件系统网站中,静态文件(例如图像和样式表)遵守 ASP.NET 授权。例如,如果禁用了对静态文件的匿名访问,匿名用户则不能使用文件系统网站中的静态文件。但在 HTTP 位置中创建网站项目时,IIS 提供不使用授权规则的静态文件。
.net提供了3种用户认证的方式,分别是Windows,Forms,Passport。
这几种形式的定义可以在网站根目录下Web.config中的authentication节点中看见。Windows是默认的验证形式,它是根据机器的访问权限来判断的。Passport是微软提供的一种验证形式,不常用。我们需要的知道并了解的是forms形式。forms验证就是表单认证,提供了以身份id和密码的形式进行验证和授权管理的功能。
1.配置web.config启用forms验证
2.配置授权设置(哪些页面未注册用户可以访问)
3.登录页面中生成用户票据便于其他页面访问
配置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>
生成用户票据
我们在登录事件的逻辑代码中(Login.aspx下)增加如下代码:
//为用户创建一个票证,并将其放入cookie或者url中(具体看你怎么设置票证的保存方式) FormsAuthentication.SetAuthCookie(userId, true); Response.Redirect("Info.aspx");
很简单的几个设置就完成了用户的认证,是不是比你在每个页面中都判断用户是否登录简便的多呢?!当然了,上面的认证只是简单的认证。假如我要实现User文件夹内的网页只有登录用户可以访问,其他的则全部用户都可以访问怎么做呢?很简单,不需要你编写代码。更改一下配置文件就是了。将根目录下的web.config的authorization标签改为<allow users="*"/>。然后在user文件下加一个web.config并修改内容如下:
<configuration> <appSettings/> <connectionStrings/> <system.web> <authorization> <deny users="?"/> <!--拒绝匿名用户访问--> </authorization> </system.web> </configuration>
个人写的测试webconfig如何起作用的代码
设置允许匿名访问的文件和文件夹
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="Style">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<!--设置验证类型和登录页面-->
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880" />
</authentication>
<!--禁止匿名访问-->
<authorization>
<deny users="?"/>
</authorization>
这篇文章有更详细的介绍。摘抄一段如下:
ASP.NET控制方法:
首先介绍例子实现的效果,一个网站登陆以后可以将用户信息保存在一个cookie中,并标识用户是通过身份验证的,在访问其他页面的时候直接对用户的身份是否通过验证进行判断,如果通过即可继续访问页面,如果是一个未通过验证的匿名访问用户(即未登录用户)则将跳转到登陆页面提示用户登录。设置其中一个用户注册页面为可以匿名访问,因为业务逻辑上只有允许注册才能登陆。
在登陆页面还是先对用户的用户名和密码进行验证,至于使用与数据库比对的方法还是到AD中验证等都可以,然后通过以下的方法将当前用户在cookie中标识为通过验证的用户,并跳转到用户跳转到登陆页之前请求的页面。
FormsAuthentication.RedirectFromLoginPage(userName,createPersistentCookie);
FormsAuthentication.RedirectFromLoginPage(UserEmail.Value, PersistCookie.Checked);
在用户直接请求的页面上我们使用如下的方法来验证用户。
Context.User.Identity.IsAuthenticated
Context:获取与该页关联的 System.Web.HttpContext 对象
User:为当前 HTTP 请求获取或设置安全信息
Identity:获取当前用户的标识
IsAuthenticated:获取一个bool值,该值指示是否验证了用户
然后我们在Web.config中进行安全设置。
<authentication mode="Forms">
<forms loginUrl="Login.aspx"></forms>
</authentication>
"Forms" 您为用户提供一个输入凭据的自定义窗体(Web 页),然后在您的应用程序中验证他们的身份。用户凭据标记存储在 Cookie 中。
<authorization>
<deny users="?" />
</authorization>
deny表示禁止,users="?"表示匿名用户
<location path="NewUser.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
表示新用户注册页面NewUser.aspx,可以允许任何人访问。
这样就实现了对于匿名用户的访问控制。