利用ASP.NET窗体身份验证机制实现自定义Web身份和角色认证

来源 :青年科学·教师版 | 被引量 : 0次 | 上传用户:xueyingnn
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:用户身份验证和用户授权是Web站点功能的重要组成部分。在应用ASP.NET进行Web开发时,目前通常都是自己编码采用Cookie+Session的方式实现身份验证和用户授权的功能。本文将针对如何利用ASP.NET窗体身份验证机制实现自定义Web身份和角色认证进行简要介绍。
  关键字:ASP.NET;FormsAuthentication
  用户身份验证和用户授权一般来说都是Web站点和基于浏览器的应用程序的重要功能。这里验证和授权是不同的概念,验证(Authentication)是指"证明你确实是你所说的人",通常是提供一个用户名和口令,然后与持久存储(比如数据库)中的用户名和口令进行对比。授权(Authorization)是指"是否有足够的权限做某件事",此时身份已经被证明过了,授权通常与用户组或者用户级别联系起来,不同的用户组拥有不同的权限(访问特定页面或者执行特定操作)。下面将从ASP.NET窗体身份验证机制和如何利用其实现自定义Web身份和角色认证两个方面进行介绍。
  一.ASP.NET窗体身份验证机制
  在应用ASP.NET进行Web开发的时候,尤其是刚接触.NET时,一般会根据要求,自己编码采用Cookie+Session的方式实现身份验证和用户授权的功能。其实ASP.NET为我们提供了一整套的验证和授权机制,只不过主要基于两个原因我们起初都不使用.NET提供的这套机制,一是我们的Web都要使用自定义的数据库用户表,而不是使用ASP.NET安全机制在App_Data目录下自动生成的ASPNetDB.mdf中的一系列数据表;除此以外,还有一个原因,就是.NET 验证机制提供的相应用户信息太少了,当在页面后置代码中使用User属性时,其Identity属性只有一个Name与用户数据相关(AuthenticationType与IsAuthenticated都是与验证相关),而很多时候我们都需要许多额外的用户数据。
  其实这只是因为我们还不是十分了解ASP.NET的安全机制所产生的一个误解罢了,以为使用ASP.NET的验证机制和登录控件就一定要使用其附带的数据表,以为Identity就只能携带一个Name属性。实际上,.NET的安全机制除了验证以外,还包括MemberShip、Profile、Role等几个部分,我们完全可以只使用它的验证机制,而绕过它的MemberShip、Profile和Role,来实现通常我们用Cookie+Session来完成的功能,而且更加高效和安全。
  我们在使用ASP.NET验证机制时一般都使用的是基于窗体的验证和授权机制(FormsAuthentication),只要在web.config文件中进行配置,那么ASP.NET就将使用基于窗体的验证和授权机制,主要通过FormsAuthenticationModule这个类来执行。与此同时,我们还可以在配置节中为其配置诸如登录页面、默认页面等信息。在配置节中进行访问授权规则的设置。
  该机制的控制流程一般按照下面步骤完成:
  1.用户访问某个页面。
  2.服务器寻找包含验证信息的cookie,如果没有找到用户将被重定向到登陆页面。
  3.浏览器请求浏览登录页面,服务器进行响应。
  4.用户输入并且提交数据。
  5.服务器通过验证用户的信息,登陆页面将创建一个包含认证票据(formauthenticationticket)的cookie。默认情况下会使用Membership和RoleManager进行。
  6.用户验证成功,服务器重新让浏览器指向ReturUrl所指定的页面。
  7.在重定向的同时,浏览器向重定向页面发送请求,请求包含验证信息的cookie。
  8.FormsAuthenticationModule类对包含身份验证信息的cookie进行验证,验证成功后,将得到当前的用户信息,并传送给HttpContext对象。
  9.验证成功后,允许访问页面。
  在此过程中,FormsAuthenticationModule类会创建一个GenericPrincipal的对象(在后台中为FormsAuthentication.User),然后把它存入HttpContext中。GenericPrincipal包含一个FormsIdentity的实例的引用(在后台中为FormsAuthentication.User.Identity),FormsIdentity实例包含了用户的信息。ASP.NET一般会通过FormsAuthentication来替我们完成上述工作。
  二、实习自定义Web身份和角色认证
  通过对ASP.NET窗体身份验证和授权机制进行了解后可知,如要解决前面提到的两个问题,首先要绕开Membership和RoleManager,这样可以使用自定义的验证逻辑和数据进行用户身份验证,实现过程需要调用FormsAuthentication的.SetAuthCookie或RedirectFromLoginPage方法,或者手动创建验证Cookie。
  另一方面如果要在认证体系中额外存放数据则要对GenericPrincipal和FormsIdentity进行重构,以创建满足自身需求的Principal和Identity。如下图所示的CustomIdentity在实现了接口IIdentity的基础上,又增加了属性PersonName,其值可以根据其Ticket的UserName属性值(即登录时的用户标示)获取。
  如果站点需要进一步实现页面的授权验证,则需要在自定义CustomPrincipal类的IsInRole方法中实现。
  定义了实现这两个接口的对象之后,我们还需要把它嵌入到应用程序的生命周期中,具体的做法就是挂接到HttpModule或者是重写Global.asax 中的事件,这里我们采用了重写Global.asax事件的方式,因此创建一个Global.asax文件,然后在应用程序的PostAuthenticateRequest事件中用我们自定义的CustomPrincipal和CustomIdentity替换掉默认的IPrincipal和IIdentity实现。
  通过以上处理,我们就可以在使用自定义的用户身份和角色验证逻辑进行用户身份和角色验证的基础上,应用ASP.NET窗体身份验证和授权机制来进行Web站点的用户身份和授权验证了。
  参考文献:
  [1] S.WALTHER。ASP.NET3.5揭秘(卷2)。人民邮电出版社,2009
  [2] 刘霓。基于.NET的用户认证模块设计。中国西部科技,2008(2)
  [3] 郑耀东。ASP.NET2.0 编程指南。人民邮电出版社,2007
其他文献
有形的物质的奥运文化遗产如吉祥物、会徽、海报,无形的非物质的奥运文化遗产如会歌、主题歌,都是无限美好的回忆。北京奥运的大幕已经落下,让我们收紧回忆的闸门,期盼4年后
期刊
日本女作家紫式部的《源氏物语》不仅仅在日本文学史上具有十分重要的意义,甚至在世界文学界都具有举足轻重的地位,可以说是一部史诗一般的文学作品。它是世界上第一部完整的
期刊
律回岁转,万象更新.金鸡三唱,迎来新世纪第一个鸡年!rn中国是农牧业大国,是世界上最早养鸡的国家之一.家鸡的祖先是原鸡,现在的家养鸡是从野生的原鸡经过长期驯化而来的.在我
玩具是孩子童年时代的珍宝,是美好童年的回忆.家长在给孩子选择玩具时,除了考虑能开发智力、有启蒙教育作用外,还要注意安全、卫生与无毒.rn挑选玩具的误区rn误区之一:既然玩
期刊
期刊
通过分析新时期高职院校的招生模式,从高职学生生源的维度探讨新时期理工科高职院校大学生的特点和属性;此外用数据分析的方式研究目前理工科高职院校大学生目前的就业现状.
班主任工作的琐碎、繁杂,除了做好一些常规工作外,还应有一颗爱心,用真情融入学生中间,多理解他们,使他们信服你,愿意把你当作他们的好朋友,愿意与你多方面地交流思想.总之需
在中国古代文学漫长的发展史中,前人有“代有所盛”之说,谓“诗盛于唐,词盛于宋,曲盛于元”。时人常将“唐诗宋词”合称,以代表一个时代文学的最高成就,而作为宋代另一种重要的文学
信息时代下互联网的蓬勃发展给网络思想政治教育带来了新的发展平台,从传播学角度看,网络思想政治教育是在网络媒体作用下的一种传播活动,大学生就是这一过程中的教育受众。