asp.net authentication配置
Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活。
Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登录页面验证用户的身份,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个 web应用就会连同这个身份Cookie一起发送到服务端。服务端上的授权设置就可以根据不同目录对不同用户的访问授权进行控制了。
问题来了,在实际是用中我们往往需要的是基于角色,或者说基于用户组的验证和授权。对一个网站来说,一般的验证授权的模式应该是这样的:根据实际需 求把用户分成不同的身份,就是角色,或者说是用户组,验证过程不但要验证这个用户本身的身份,还要验证它是属于哪个角色的。而访问授权是根据角色来设置 的,某些角色可以访问哪些资源,不可以访问哪些资源等等。要是基于用户来授权访问将会是个很不实际的做法,用户有很多,还可能随时的增减,不可能在配置文 件中随时的为不断增加的新用户去增加访问授权的。
下面大概的看一下Forms的过程。
一、web.config配置
<authentication mode="Forms"> <!--默认状态下为Windows--> <forms name="myTeacher" loginUrl="~/pw_admin/Login.aspx" defaultUrl="pw_admin/Default.aspx" protection="All" path="pw_admin/" timeout="30"></forms> <!--未通过则转向Login.aspx登录页--> </authentication>
二、在admin文件夹下新建一个web.config文件,并加入以下代码
<system.web> <!--拒绝匿名用户访问此目录下的任何文件--> <authorization> <deny users="?"/> </authorization> </system.web>
有事需要允许访问admin目录下js,css等文件,可以在web.config加入如下代码
<location path="css/"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location>
三、在根目录下,创建Login.aspx登陆页面(可不是在admin目录下哦),加两个textbox控件和一个botton控件,分别是用户名,密码,和登陆按钮
双击登陆按钮,在其登陆方法里写上:
protected void btn_Login_Click(object sender, EventArgs e) { if (TextBox1.Text == "admin" && TextBox2.Text == "fenghua17173") { //“通知”表单验证,该用户名已经通过身份验证 FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, true); } else { Response.Write("<script>alert('账号或密码有误,登录失败!');</script>"); } }
四、退出或注销
protected void btn_Logout_Click(object sender, EventArgs e) { //删除用户票据 FormsAuthentication.SignOut(); //重新定向到登陆页面 FormsAuthentication.RedirectToLoginPage(); }