浅析ASP.NET的身份验证

一、问题描述
  1、问题的提出
   在网站的开发中,大多数都会碰到与用户的交互。用户可以利用应用程序来完成自己的业务或实现一些功能,比如发布信息,获取信息等等。为了交互应用的需 要,这些用户需要保存到存储器中,不同用户的权限不同,比如:管理员可以配置应用程序,可以增、删、改用户信息,而普通的用户只能浏览网站。要实现不同用 户的权限管理,首先就要对不同的用户的身份进行确认,这就是本文要讲述的主题———身份验证。
  2、身份验证的概念
  什么是身份验证?web应用程序中如果想要不同的用户有不同的资源访问权限,就要对访问该资源的用户进行辨别,应用程序需要知道该用户是谁,以确定访问者的身份是否有权限进行访问和操作。这一过程就是身份验证。
  二、ASP.NET2.0提供的4种身份验证模式
  1、Windows验证
  使用这种身份验证模式时,ASP.NET依赖于IIS对用户进行验证,并创建一个Windows访问令牌来表示已通过验证的标识。IIS提供以下几种身份验证机制:
  l基本身份验证
  l简要身份验证
  l集成windows身份验证
  l证书身份验证
  l匿名身份严整
  2、Passport(护照)身份验证
  在通常的基于用户名和密码的身份验证程序中,网站开发人员一般要处理下面几个过程:
  l一个用于用户输入用户名和密码的图形界面
  l一个用来保存用户信息的数据库
  l实现用户验证
  l注销功能
   如果自己来编写登陆程序的话,上面的步骤是必不可少的。ASP.NET提供了Passport身份验证模式,由Microsoft提供集中身份验证服 务,完全实现了上面提到的4个方面,这些功能由System.Web.Security.PassportIdentity类来实现。网站开发人员只需要 在自己的代码中实例化System.Web.Security.PassportIdentity类,调用其相关的方法就可完成基于用户名和密码的身份验 证程序。
  3、Forms(窗体)身份验证
  Forms身份验证是使用比较多的一种验证方式,它不需要依赖任何其他的程序或服务,完 全靠网站开发人员来进行控制,因此,在web应用程序中被广泛使用。这种验证方式使用客户端重定向功能,将未通过身份验证的用户转发到特定的登录窗体,要 求用户输入其凭据信息(通常是用户名和密码)。这些凭据信息被验证后,系统生成一个身份验证票证(ticket)并将其返回客户端。身份验证票证可在用户 的会话期间维护用户的身份标识信息,以及用户所属的角色列表。
  4、None
  使用这种身份验证模式,表示你不希望对用户进行验证,或是采用自定义的身份验证协议。
  三、ASP.NET身份验证配置架构
  ASP.NET身份验证方式可以在web.config里设置,下面介绍与身份验证有关的配置架构。
  1、authentication元素
  在web.config里,authentication元素配置ASP.NET身份验证支持,使用mode属性指定应用程序的默认身份验证模式。
  mode=”Windows”,采用windows身份验证
  mode=”Forms”,基于窗体身份验证
  mode=”Passport”,采用护照身份验证
  mode=”None”,不指定任何身份验证
  2、Forms元素
   Forms元素为基于窗体的自定义身份验证配置ASP.NET应用程序。在URL中发送Forms身份验证票时,如果匿名标识票、Forms身份验证 票、会话ID和用户数据的组合超出允许的最大URL所允许的长度(一般是255个字符),则请求会失败并显示”400-BadRequest”错误。
  3、credentials元素
  credentials元素设置允许选择在配置文件中定义名称和密码凭据。用户还可以实现自定义的密码架构,以使用外部源(如:数据库)来控制验证。Credentials元素passwordFormat定义如下:
  lClear:指定密码不加密
  lSHAI:指定使用SHAI哈希算法给密码加密,此值为默认值
  lMD5:指定使用MD5哈希算法给密码加密
  4、passport元素
   passport元素指定在使用Passport方式验证时用户要重定向到的登陆页。仅当authentication元素的mode属性设置为 Passport时,此元素才有效。Passport身份验证是由Microsoft提供的集中身份验证服务,该服务为成员站点提供单一登陆和核心配置文 件服务。若要使用Passport身份验证,在使用前,必须将站点注册到Passport服务,然后接受许可协议并安装.NETPassportSDK。
  5、machineKey元素
  machineKey元素对密钥进行配置,以方便其用于对Forms身份验证Cookie数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。         

  四、选择身份验证机制
  设计分布式应用程序的身份验证是一项具有挑战性的任务。在应用程序开发的早期阶段,进行适当的身份验证设计有助于降低许多安全风险。
  1、各种身份机制的比较
  

 

用户是否需要在服务器中拥有windows帐户

是否支持委托

是否需要windows 2k客户端和服务器

凭据是否明文传输

是否支持非IE浏览器

基本身份验证

简要身份验证

证书身份验证

Forms身份验证

Passport身份验证

    2、选择身份验证机制需要考虑的因素
  l标识
  只有当应用程序的用户具有的windows帐户可以通过一个受信任的权威机构(它可以被应用程序web服务器访问)来进行验证时,使用windows身份验证机制才是合适的。
  l凭据管理
   windows身份验证的一个关键优势在于它可以使用操作系统进行凭据管理。当使用非windows身份验证方式,例如窗体身份验证时,它必须仔细考虑 在何处以及如何保存用户凭据。其中最常用的方式是使用sqlserver数据库或使用位于ActiveDirectory中的User对象。
  l标识流动
  是否需要实现一个模拟/委托模型,并将原始调用者的安全上下文在操作系统级进行跨层流动-例如,以便支持审核或针对每个用户的精细授权。
  l浏览器类型
  应用程序的所有用户是否都拥有IE浏览器?或是你是否需要支持一个具有混合型浏览器的用户群?我们选择身份验证时需要根据各种方式的特点,综合考虑以上因素。
  五、基于Forms身份验证模式的实现方法
  使用Forms身份验证比较简单,下面通过一个实例来说明Forms身份验证的实现方法。这里假设整个网站都需要登陆才能访问,而且需要有注册页面
  1、站点根目录下,配置web.config,使用Forms身份验证
  将元素设置为:
  注解:
  (1)mode="Forms",身份验证为Forms模式
  (2)name="MyAppFormAuth",用于身份验证的Cookie的名字
  (3)loginUrl="login.aspx",身份验证时用户登陆的url
  (4)protection="All"指定应用程序同时使用数据验证和加密方法来保护Cookie。
  (5)timeout="20"指定Cookie过期的时间为20分钟。
  2、在站点根目录下建立登陆界面login.aspx,关键代码如下:
  protecedvoidCmdLogin_Click(objectsender,EventArgse)
  {
  //为了讲解方便,省略数据库查询过程,直接判断。
  If(UserName.Text==”dl”&&Userpwd.Text==”123”)
  {
  FormsAuthentication.RedirectFromLoginPage(UserName,chkPersist.Checked);
  }
  else
  {
  Info.Text=”口令错误,请重新输入。”;
  }
  }
  注解:
  (1)UserName:输入用户名的文本框
  (2)Userpwd:输入密码的文本框
  (3)ChkPersist:是否记录口令的复选按钮
  六、总结
  本文介绍了Web应用程序开发中对注册用户进行身份验证的功能,ASP.NET2.0提供了多种实现方法,要根据应用程序的使用对象来选择适合自己的方法。Forms身份验证是Web应用程序中最常用的方式,也是比较简单的方式。来源:期刊发表向导

你可能感兴趣的:(浅析ASP.NET的身份验证)