云南天气免费注册登陆发布文章  
网页教程   |   平面教程   |   网络编程   |   数据库   |   服务器
您所在的位置:云港首页 >> 站长学院 >> 网络编程 >> 正文
ASP.NET中的Windows身份验证详解
文章来源:本站收集 责任编辑:yn47.com 加入时间:2008-4-6 字体显示:
  本教程阐释在ASP.NET2.0版中,IIS集成Windows身份验证以及ASP.NETWindows身份验证的工作机制。同时,阐释NTLM和Kerberos身份验证的工作机制。此外,本教程还阐释WindowsAuthenticationModule类如何构造WindowsPrincipal和WindowsIdentity对象,然后将这些对象附加到当前的ASP.NETWeb请求以表示经过身份验证的用户。
  
  概述
  
  身份验证是一个验证客户端身份的过程,通常采用指定的第三方授权方式。客户端可能是最终用户、计算机、应用程序或服务。客户端的标识称为安全原则。为了使用服务器应用程序进行验证,客户端提供某种形式的凭据来允许服务器验证客户端的标识。确认了客户端的标识后,应用程序可以授予执行操作和访问资源的原则。
  
  如果应用程序使用ActiveDirectory用户存储,则应该使用集成Windows身份验证。对ASP.NET应用程序使用集成Windows身份验证时,最好的方法是使用ASP.NET的Windows身份验证提供程序附带的Internet信息服务(IIS)身份验证方法。使用该方法,将自动创建一个WindowsPrincipal对象(封装一个WindowsIdentity对象)来表示经过身份验证的用户。您无需编写任何身份验证特定的代码。
  
  ASP.NET还支持使用Windows身份验证的自定义解决方案(避开了IIS身份验证)。例如,可以编写一个根据ActiveDirectory检查用户凭据的自定义ISAPI筛选器。使用该方法,必须手动创建一个WindowsPrincipal对象。
  
  ASP.NET身份验证
  
  IIS向ASP.NET传递代表经过身份验证的用户或匿名用户帐户的令牌。该令牌在一个包含在IPrincipal对象中的IIdentity对象中维护,IPrincipal对象进而附加到当前Web请求线程。可以通过HttpContext.User属性访问IPrincipal和IIdentity对象。这些对象和该属性由身份验证模块设置,这些模块作为HTTP模块实现并作为ASP.NET管道的一个标准部分进行调用,如图3所示。
  
  图3.ASP.NET管道
  
  ASP.NET管道模型包含一个HttpApplication对象、多个HTTP模块对象,以及一个HTTP处理程序对象及其相关的工厂对象。HttpRuntime对象用于处理序列的开头。在整个请求生命周期中,HttpContext对象用于传递有关请求和响应的详细信息。
  
  有关ASP.NET请求生命周期的详细信息,请参阅"ASP.NETLifeCycle",网址是http://msdn2.microsoft.com/library/ms227435(en-US,VS.80).aspx。
  
  身份验证模块
  
  ASP.NET2.0在计算机级别的Web.config文件中定义一组HTTP模块。其中包括大量身份验证模块,如下所示:
  
  以下是引用片段:
  
  <httpModules>
  
  <addname="WindowsAuthentication"
  
  type="System.Web.Security.WindowsAuthenticationModule"/>
  
  <addname="FormsAuthentication"
  
  type="System.Web.Security.FormsAuthenticationModule"/>
  
  <addname="PassportAuthentication"
  
  type="System.Web.Security.PassportAuthenticationModule"/>
  
  </httpModules>
  
  只加载一个身份验证模块,这取决于该配置文件的authentication元素中指定了哪种身份验证模式。该身份验证模块创建一个IPrincipal对象并将它存储在HttpContext.User属性中。这是很关键的,因为其他授权模块使用该IPrincipal对象作出授权决定。
  
  当IIS中启用匿名访问且authentication元素的mode属性设置为none时,有一个特殊模块将默认的匿名原则添加到HttpContext.User属性中。因此,在进行身份验证之后,HttpContext.User绝不是一个空引用(在VisualBasic中为Nothing)。
  
  WindowsAuthenticationModule
  
  如果Web.config文件包含以下元素,则激活WindowsAuthenticationModule类。
  
  以下是引用片段:
  
  <authenticationmode="Windows"/>
  
  WindowsAuthenticationModule类负责创建WindowsPrincipal和WindowsIdentity对象来表示经过身份验证的用户,并且负责将这些对象附加到当前Web请求。
  
  对于Windows身份验证,遵循以下步骤:
  
  •WindowsAuthenticationModule使用从IIS传递到ASP.NET的Windows访问令牌创建一个WindowsPrincipal对象。该令牌包装在HttpContext类的WorkerRequest属性中。引发AuthenticateRequest事件时,WindowsAuthenticationModule从HttpContext类检索该令牌并创建WindowsPrincipal对象。HttpContext.User用该WindowsPrincipal对象进行设置,它表示所有经过身份验证的模块和ASP.NET页的经过身份验证的用户的安全上下文。
  
  •WindowsAuthenticationModule类使用P/Invoke调用Win32函数并获得该用户所属的Windows组的列表。这些组用于填充WindowsPrincipal角色列表。
  
  •WindowsAuthenticationModule类将WindowsPrincipal对象存储在HttpContext.User属性中。随后,授权模块用它对经过身份验证的用户授权。
  
  注:DefaultAuthenticationModule类(也是ASP.NET管道的一部分)将Thread.CurrentPrincipal属性设置为与HttpContext.User属性相同的值。它在处理AuthenticateRequest事件之后进行此操作。
返回栏目首页】 【打印此页】 【发表评论】 【发布文章】 【关闭此页
返回云南设计港首页
发表评论 查看评论
您的昵称: 1、遵守中华人民共和国有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。
2、本网拥有管理笔名和留言的一切权力。
3、您在本站留言板发表的言论,本网有权在网站内转载或引用。
4、如您对管理有意见请向留言板管理员或本网反映。
评论内容:
验 证 码: 看不清,请刷新验证码
相关文章
热点推荐
站长在线
网站运营
站长休闲
版权所有 云南设计港 © all Rights Reserved.  为了更好的浏览,建议使用分辨率:1024×768和iE6.0以上的浏览器浏览本网站
  滇icP备06002874号