摘要:本教程阐释 ASP.NET 2.0 版中窗体身份验证的工作机制;阐释 IIS 和 ASP.NET 身份验证如何协作,以及 FormsAuthenticationModule 类的角色与操作。
概述
窗体身份验证使用用户登录到站点时创建的身份验证票,然后在整个站点内跟踪该用户。窗体身份验证票通常包含在一个 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>