| 上面几个小节主要介绍了利用web.config基于用户名的身份验证,在实际开发过程中,还经常遇到另外一种情况,例如:网站的后台管理页面只能够被允许管理员角色的用户才能访问,其他角色不能够访问。我们可以借助于<authentication>配置节,按照如下方式进行配置,现用<allow>配置节允许角色Admins管理员,在使用<deny>配置节拒绝所有用户,那么可以达到只允许管理员访问的目的。 完成基于角色的身份验证,大致可以分三个部分: 1. web.config部分,用户设置身份验证和权限控制。 2. ASP.NET部分,用户添加身份验证票证。 3. Global.asax部分,设置身份验证请求事件。
 代码演示: 基于角色的身份验证web.config部分 复制代码<configuration><system.web><authentication mode="Forms"><forms name="myForm" loginUrl="UserLogin.aspx" timeout="10" defaultUrl="Main.aspx"></forms></authentication><authorization><allow roles="Admins"><deny users="?"></authorization> </system.web></configuration>
在C#代码中,添加身份验证票证的时候,将用户的角色信息添加到票证中,与<authorization>结合从而实现目标。 参考代码如下: 代码演示: 基于角色的身份验证ASP.NET部分 复制代码protected void btnLogin_Click(object sender, EventArgs e){    string loginname = this.txtLoginName.Text;    string loginpwd = this.txtLoginPwd.Text;    if (loginname == "张三" && loginpwd == "123456")    {        //为了演示,将角色定义到变量中        string role = "Admins";        //创建票证对象        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(            1, loginname, DateTime.Now, DateTime.Now.AddMinutes(30), true, role);        //对票证对象加密措施        string hashticket = FormsAuthentication.Encrypt(ticket);        //将票证添加到Cookie中        HttpCookie usercookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashticket);        Response.Cookies.Add(usercookie);        //将页面重定向到指定URL        Response.Redirect(FormsAuthentication.GetRedirectUrl(loginname,true));    }}
代码演示: 基于角色的身份验证Global.asax部分 复制代码<%@ Application Language="C#" %><script runat="server">    protected void Application_AuthenticateRequest(Object sender, EventArgs e)    {        HttpApplication app = (HttpApplication)sender;        //获取本次Http请求的HttpContext对象        HttpContext ctx = app.Context;           if (ctx.User != null)        {            //验证过的一般用户才能进行角色验证              if (ctx.Request.IsAuthenticated == true)             {                //获得身份验证用户的标识                System.Web.Security.FormsIdentity fi = (System.Web.Security.FormsIdentity)ctx.User.Identity;                //取得身份验证票                  System.Web.Security.FormsAuthenticationTicket ticket = fi.Ticket;                //从UserData中恢复role信息                string userData = ticket.UserData;                //将角色数据转成字符串数组,得到相关的角色信息                  string[] roles = userData.Split(',');                //这样当前用户就拥有角色信息了                ctx.User = new System.Security.Principal.GenericPrincipal(fi, roles);             }        }    }</script>
在上面代码中,通过Global.asax文件访问到HttpApplication的安全模块建立事件,通过身份验证用户的标识,获得身份验证的票证,并在票证中加入用户角色相关信息,结合web.config和ASP.NET达到基于角色身份验证的目的。 
 |