马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

ASP.NET安全机制(四)基于角色的安全机制

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

C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则