网站的身份验证
左直拳
前段时间用ASP.NET做一个网站,其中有个要求是网站里有些页面或功能需要用户登录后才能浏览或使用。
应该没有什么问题,因为ASP.NET提供了完善的身份验证服务。
ASP.NET 与 IIS 一起使用以支持身份验证。有四种验证方式供君选择:None,Windows,Form以及Passport。Passport我不知道怎么用,而None又不知道有什么用,估计是逗你玩。用Form吧,系统会将未经身份验证的请求重定向到登录页,验证通过后,系统又自动转向此前请求的页面,正适合网站的要求。
“我,只用力士。”——国际影星娜塔莎·金丝姬。
现在问题是,怎样来控制哪些页面需要身份验证,哪些可以随便浏览?
身份验证在配置文件web.config里定义。在一个网站里,可能存在多个web.config。比如,根目录下有一个,某些子目录下又各有一个。按我的理解,web.config就好象面向对象里的类,具有继承和重载的特性,比如说,假设有个属性,子目录下的web.config没有重新定义,则继承根目录下的定义,否则以自己的定义为准。
这样子,针对我们这个网站的要求,只要在根目录下定义默认是允许所有人访问,然后再对特定的页面和子目录定义为拒绝匿名访问,不就搞定了吗?
假设有个网站web,其下有子目录s1,s2,文件default.aspx,info.aspx,login.aspx。如图所示
要求根目录下文件info.aspx、子目录s1需要经过身份验证才可浏览,其余可自由浏览,则根目录web.config定义如下:
<system.web>
<authentication mode="Forms" >
<!-- 登陆页面为login.aspx -->
<forms name="web" loginUrl="login.aspx" protection="All" timeout="120"/>
</authentication>
<authorization>
<allow users="*" /> <!-- 允许所有用户 -->
</authorization>
</system.web>
<location path="s1"><!—子目录s1拒绝匿名访问,必须先登陆 -->
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
<location path="info.aspx"><!—页面info.aspx拒绝匿名访问,必须先登陆 -->
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
这样子设置后,info.aspx,/s1/*.*都要先经过身份验证才可访问,否则,系统将自动转向登陆页面login.aspx。
假如子目录s1里有文件例外,例如welcome.aspx不需要身份验证,则在s1/web.config里定义
<configuration>
<location path="welcome.aspx"> <!-- 允许所有用户 -->
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
</configuration>
左直拳的马桶(http://blog.csdn.net/leftfist/)
左直拳的马桶(http://blog.csdn.net/leftfist/)