概述
窗体身份验证使用用户登录到站点时创建的身份验证票,然后在整个站点内跟踪该用户。窗体身份验证票通常包含在一个 Cookie 中。
然而,ASP.NET 2.0 版支持无 Cookie 窗体身份验证,结果是将票证传入查询字符串中。如果用户请求一个需要经过身份验证的访问的页,且该用户以前没有登录过该站点,则该用户重定向到一个配置好的登录页。该登录页提示用户提供凭据(通常是用户名和密码)。然后,将这些凭据传递给服务器并针对用户存储(如 SQL Server 数据库)进行验证。在 ASP.NET 2.0 中,用户存储访问可由成员身份提供程序处理。对用户的凭据进行身份验证后,用户重定向到原来请求的页面。
窗体身份验证处理由 FormsAuthenticationModule 类实现,该类是一个参与常规 ASP.NET 页处理循环的 HTTP 模块。本文阐释 ASP.NET 2.0 中窗体身份验证的工作机制。
IIS 身份验证
ASP.NET 身份验证分为两个步骤。首先,Internet 信息服务 (IIS) 对用户进行身份验证,并创建一个 Windows 令牌来表示该用户。IIS 通过查看 IIS 元数据库设置,确定应该对特定应用程序使用的身份验证模式。如果 IIS 配置为使用匿名身份验证,则为 IUSR_MACHINE 帐户生成一个令牌并用它表示匿名用户。然后,IIS 将该令牌传递给 ASP.NET。
其次,ASP.NET 执行自己的身份验证。所使用的身份验证方法由 authentication 元素的 mode 属性指定。以下身份验证配置指定 ASP.NET 使用 FormsAuthenticationModule 类:
<authentication mode="Forms" />
注 由于窗体身份验证不依赖于 IIS 身份验证,因此如果要在 ASP.NET 应用程序中使用窗体身份验证,则应该在 IIS 中为应用程序配置匿名访问。
ASP.NET 窗体身份验证
ASP.NET 窗体身份验证在 IIS 身份验证完成后发生。可以使用 forms 元素配置窗体身份验证。
窗体身份验证配置
以下配置文件片段显示窗体身份验证的默认属性值。
<system.web> <authentication mode="Forms"> <forms loginUrl="Login.aspx" protection="All" timeout="30" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" /> </authentication> </system.web>
下面是对默认属性值的描述:
·
loginUrl 指向应用程序的自定义登录页。应该将登录页放在需要安全套接字层 (SSL) 的文件夹中。这有助于确保凭据从浏览器传到 Web 服务器时的完整性。
·
protection 设置为 All,以指定窗体身份验证票的保密性和完整性。这导致使用 machineKey 元素上指定的算法对身份验证票证进行加密,并且使用同样是 machineKey 元素上指定的哈希算法进行签名。
·
timeout 用于指定窗体身份验证会话的有限生存期。默认值为 30 分钟。如果颁发持久的窗体身份验证 Cookie,timeout 属性还用于设置持久 Cookie 的生存期。
·
name 和 path 设置为应用程序的配置文件中定义的值。
·
requireSSL 设置为 false。该配置意味着身份验证 Cookie 可通过未经 SSL 加密的信道进行传输。如果担心会话窃取,应考虑将 requireSSL 设置为 true。
·
slidingExpiration 设置为 true 以执行变化的会话生存期。这意味着只要用户在站点上处于活动状态,会话超时就会定期重置。
·
defaultUrl 设置为应用程序的 Default.aspx 页。
·
cookieless 设置为 UseDeviceProfile,以指定应用程序对所有支持 Cookie 的浏览器都使用 Cookie。如果不支持 Cookie 的浏览器访问该站点,窗体身份验证在 URL 上打包身份验证票。
·
enableCrossAppRedirects 设置为 false,以指明窗体身份验证不支持自动处理在应用程序之间传递的查询字符串上的票证以及作为某个窗体 POST 的一部分传递的票证。
更多内容请看.NET开发手册 .NET框架架构 .NET移动与嵌入式技术专题,或进入讨论组讨论。
·.NET开发手册 (4902篇文章)
·ASP.NET教程 (6902篇文章)
·.NET框架架构 (405篇文章)
·ASP.NET应用篇 (2198篇文章)
·从零开始学ASP.NET(基础篇) (7785次浏览)
·ASP.NET 2.0中Gridview控件高级技巧 (6024次浏览)
·ASP.NET2.0连接SQL Server数据库详解 (3363次浏览)
·ASP.NET 2.0移动开发入门之基础 (1211次浏览)
·面试ASP.NET程序员的笔试题和机试题 (623次浏览)
·为Asp.net应用程序设置构建Web服务 (617次浏览)
·ASP.NET Web Matrix开发工具简介 (575次浏览)
·技巧:ASP.NET热点问题解答14个 (451次浏览)
·详细介绍ASP.NET状态保存方法 (396次浏览)
·Asp.net中实现单点登陆 10-31
·ASP.NET中的蝴蝶效应 10-31
·ASP.NET中的MVC模式应用 10-31
·Asp.net中操作EXCEL文件(C#) 10-31
·Asp.net中Treeview解决方案 10-31
·ASP.NET中NHibernate的最佳实践 10-31
·ASP.NET在VS2008与.NET FX 3.5中增强的功能 10-31
·ASP.NET应用程序性能优化 10-31
·ASP.NET应用程序的成员管理与安全 10-31



