浅析ASP.NET Forms验证
创始人
2024-04-25 12:01:58
0

ASP.NET Forms验证,下面看一下授权的详细过程:

1). 一旦一个用户访问这个网站,就行登录确认了身份,身份验证票的cookie也写到了客户端。之后,这个用户再次申请这个web的页面,身份验证票的cookie就会发送到服务端。在服务端,ASP.NET为每一个http请求都分配一个HttpApplication对象来处理这个请求,在 HttpApplication.AuthenticateRequest事件后,安全模块已建立用户标识,就是此用户的身份在web端已经建立起来,这个身份完全是由客户端发送回来的身份验证票的cookie建立的。

2). 用户身份在HttpContext.User 属性中,在页面中可以通过Page.Context 来获取同这个页面相关的HttpContext对象。对于Forms验证,HttpContext.User属性是一个GenericPrincipal类型的对象,GenericPrincipal只有一个公开的属性Identity,有个私有的m_role属性,是string[]类型,存放此用户是属于哪些role的数组,还有一个公开的方法IsInRole(string role),来判断此用户是否属于某个角色。
由于身份验证票的cookie中根本没有提供role属性,就是说Forms身份验证票没有提供此用户的role信息,所以,对于Forms验证,在服务端得到的GenericPrincipal 用户对象的m_role属性永远是空的。

3). GenericPrincipal. Identity 属性是一个FormsIdentity类型的对象,这个对象有个Name属性,就是此用户的标示,访问授权就是将此属性做为user来进行授权验证的。 FormsIdentity还有一个属性,就是Ticket属性,此属性是身份验证票FormsAuthenticationTicket类型,就是之前服务器写到客户端的身份验证票。

服务器在获取到身份验证票FormsAuthenticationTicket对象后,查看这个身份验证票是不是非持久的身份验证,是的话要根据web.config中timeout属性设置的有效期来更新这个身份验证票的cookie(为避免危及性能,在经过了超过一半的指定时间后更新该 Cookie。这可能导致精确性上的损失。持久性 Cookie 不超时。)

4). 在HttpApplication.ResolveRequestCache事件之前,ASP.NET开始取得用户请求的页面,建立HttpHandler控制点。这就意味着,在HttpApplication.ResolveRequestCache事件要对用户访问权限就行验证,看此用户或角色是否有权限访问这个页面,之后在这个请求的生命周期内再改变此用户的身份或角色就没有意义了。

以上是ASP.NET Forms验证的全过程,可以看出,这个ASP.NET Forms验证是基于用户的,没有为角色的验证提供直接支持。身份验证票FormsAuthenticationTicket 中的Name属性是用户标示,其实还有一个属性UserData,这个属性可以由应用程序来写入自定义的一些数据,我们可以利用这个字段来存放role的信息,从而达到基于角色验证的目的。

  1. privatevoidButton1_Click(objectsender,System.EventArgse)  
  2. {  
  3. //实体类AdminUserVO对应AdminUser用户表。  
  4. AdminUserVOadminUserVO=newAdminUserVO();  
  5.  
  6. adminUserVO.Uname=UserName.Text.Trim();  
  7. adminUserVO.Upwd=UserPwd.Text.Trim();  
  8. adminUserVO.LastIP=HttpContext.Current.Request.UserHostAddress;  
  9. adminUserVO.LastTime=DateTime.Now;  
  10.  
  11. boolflag=(newLoginDAO()).Chk(adminUserVO);  
  12.  
  13. if(flag)  
  14. {  
  15. //非角色验证时可以用这句:  
  16. //System.Web.Security.FormsAuthentication.SetAuthCookie(UserName.Text.Trim(),false);  
  17.  
  18. //创建角色验证信息,把role信息写入到UserData中  
  19. SetLoginCookie(adminUserVO,adminUserVO.Roles.ToLower());  
  20.  
  21. HttpContext.Current.Response.Redirect("Main.aspx");  
  22. }  
  23. else  
  24. {  
  25. HttpContext.Current.Response.Write("登录失败");  
  26. }  

【编辑推荐】

  1. ASP.NET开发技巧之Theme功能浅析
  2. 详解ASP.NET动态编译
  3. Apache支持ASP.NET方法浅析
  4. 浅谈ASP.NET服务器标准控件
  5. ASP.NET中SQL Server数据库备份恢复浅析

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...